iOS中关于链式编程

首先参考的是这篇写的非常不错的文章,写的非常清晰,在这里我就补充一点个人的理解,以加深印象。

首先大家应该熟悉block的定义及用法

- (People *(^)(NSString * name))people;

这个方法的返回值是block本身,而这个block的返回值是people这个类,所以他才能连续的使用点语法调用方法。

Masonry 与其它的第三方开源框架一样选择了使用分类的方式为 UIKit 添加一个方法 mas_makeConstraint
, 这个方法接受了一个 block, 这个 block 有一个 MASConstraintMaker
类型的参数, 这个 maker 会持有一个约束的数组, 这里保存着所有将被加入到视图中的约束.
我们通过链式的语法配置 maker, 设置它的 left
right
等属性, 比如说 make.left.equalTo(view)
, 其实这个 left
equalTo
还有像 with
offset
之类的方法都会返回一个 MASConstraint
的实例, 所以在这里才可以用类似 Ruby 中链式的语法.
在配置结束后, 首先会调用 maker 的 install
方法, 而这个 maker 的 install
方法会遍历其持有的约束数组, 对其中的每一个约束发送 install
消息. 在这里就会使用到在上一步中配置的属性, 初始化 NSLayoutConstraint
的子类 MASLayoutConstraint
并添加到合适的视图上.
视图的选择会通过调用一个方法 mas_closestCommonSuperview:
来返回两个视图的最近公共父视图.

你可能感兴趣的:(iOS中关于链式编程)