翻译-为什么objc_msgSend必须用汇编实现

译者前言

总是看到有人说用汇编实现objc_msgSend是为了速度快,当然这个不可否认。但是难道没有别的原因?于是就看到了这篇文章,遂翻译之!=。=

我自己的理解就是,用汇编实现,是为了应对不同的“Calling convention”,把函数调用前的栈和寄存器的参数、状态设置,交给编译器去处理。
先看看原文吧。

原作者: Ari Grant
原文链接: Why objc_msgSend Must be Written in Assembly

API返回结果设计经验与总结

前言

RESTful API的设计已经很成熟了,大家也都比较认可。本文也不再过多介绍RESTful API相关的知识,而是针对JSON型API的返回结果设计,总结下自己的经验。

结构

先来看看返回结果的结构示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
data : { // 请求数据,对象或数组均可
user_id: 123,
user_name: "tutuge",
user_avatar_url: "http://tutuge.me/avatar.jpg"
...
},
msg : "done", // 请求状态描述,调试用
code: 1001, // 业务自定义状态码
extra : { // 全局附加数据,字段、内容不定
type: 1,
desc: "签到成功!"
}
}

总结一些iOS项目中组织代码的方法

前言

总结一些组织代码的方法,大到各个子项目模块之间,小到单个文件内部,涉及到了CocoaPods私有库、Carthage构建私有Framework、项目内Group和文件夹、类内用Category组织、文件内的#pragam mark、// MARK -。虽然有些老生常谈,就当是重新梳理一遍吧=。=。

对组件化与模块化的思考与总结

前言

前段时间反复研读了蘑菇街 App 的组件化之路蘑菇街 App 的组件化之路·续iOS应用架构谈 组件化方案,然后又找到了其它一些研究组件化、模块化方案的文章,但是总觉得差点什么,所以还是决定从头开始思考。文章的标题起的好宽泛,感觉给自己挖了个深坑-。-,其实只是自己对组件化、模块化的一些看法、总结。

开源项目-TTGTagCollectionView

更新

  • 2017-02-27: 增加两种Alignment布局类型;增加点击前的回调判断;增加选中Tag上限
  • 2016-12-25: 不再依赖UICollectionView,减少了位置刷新次数,提高性能;增加了alignment属性,可以靠左中右排列
  • 2016-10-29: 增加Tag的阴影和ContentInset的设置,更新了Demo
  • 2016-10-17: 增加了水平滑动;Autolayout适配;UITableViewCell例子等
  • 2016-02-18: 修复了超长标签导致排版错误的Bug

前言

这段时间做项目的时候,总是需要显示一些“标签”样式的内容,但是又找不到用的顺手的库,所以琢磨了几天,自己实现了出来,就有了这个库:TTGTagCollectionView。如果只需要显示文字标签的话,直接使用TTGTextTagCollectionView,需要自己定义标签的话,就用TTGTagCollectionView,效果如下:

ScreenShot

支持五种布局排版:

Alignment

CocoaPods: pod "TTGTagCollectionView"
Carthage: github "zekunyan/TTGTagCollectionView"

Github地址: https://github.com/zekunyan/TTGTagCollectionView

有趣的Autolayout示例3-Masonry实现

更新

  • 2016-06-02: 感谢我不是蜡笔小新但是我有小白,发现了Case 2的最后两个cell展开动画问题,原来是tableView的estimatedRowHeight会跟展开动画冲突的缘故。
  • 2015-12-23: 感谢XVXVXXX的PR,Case 1不再需要Fake Header View,直接用contentInset就好~
  • 2015-12-17:Case3的等间距,用UIStackView实现最优雅,但是无奈只有iOS9以上支持。兼容方案如OAStackView也可以,但是在UITableViewCell里面用,或者需要频繁的增减内部View的数量时,性能损耗有点厉害,会卡。所以,还是要看需求=。=

前言

第三篇来了。
依然是3个小例子,主要部分用Masonry手写代码实现,其它的约束在storyboard里面直接拖拽搭建。
至于为啥不用VFL,主要是因为它的“描述性”的写法很容易出错,没有补全、不好调试,写起来没有“代码”的感觉=。=。当然,这个仁者见仁智者见智~
三个例子分别是:Parallax Header动态变高度的UITableViewCell,以及两种方式实现等间距。原理其实都很简单,例子也都是平时积累起来的。

前两篇:

Github地址:
https://github.com/zekunyan/AutolayoutExampleWithMasonry

Gif示例

Swift写的库-TTGSnackbar

更新

  • 2016-12-25: 增加多行文本的支持,增加阴影
  • 2016-10-20: 增加ContentInset,也就是Padding的属性;增加自定义内容View; 版本1.3.0
  • 2016-10-17: 支持Swift3;增加的顶部Top位置动画;增加同时两个Action按钮;增加带图片icon显示
  • 2016-03-25: 版本更新到了0.5.1,补充些说明、示例

TTGSnackbar

用Swift写了个简单的控件库:TTGSnackbar,模仿Android的Snackbar。目前更新到了版本1.3.0。支持多种动画,增强了自定义。

Github: https://github.com/zekunyan/TTGSnackbar

Screenshot

Gif

Screenshot

有趣的Autolayout示例2-Masonry实现

前言

Masonry写的Autolayout示例又来了,仍然是三个小例子,分别是变高度的UITableViewCell、topLayoutGuide与bottomLayoutGuide,还有自定义的baseline,外加两个基本的知识点讲解,说不上“有趣”=。=,比较基础,写了很多,各位随意看看吧~

Github地址:
https://github.com/zekunyan/AutolayoutExampleWithMasonry

Gif示例

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器