链式编程的优点:
1.优雅易读
2.书写效率高
链式编程的缺点:
1.效率比原生略低
2.出错定位比原生较难
我们以为可变数组增加一个追加元素为例,比较一下两种的写法。
原生写法:
[muArr addObject:@"x"];
[muArr addObject:@9];
链式编程写法
muArr.add(@"x").add(nil).add(@9);
具体实现为:
@interface NSMutableArray (PandaKit)
- (NSMutableArray* (^)(id))add;
@end
@implementation NSMutableArray (PandaKit)
- (NSMutableArray* (^)(id))add;
{
return ^id(id x) {
if (x) {
[self addObject:x];
}
return self;
};
}
@end
例子中,函数 add 的返回值是一个 以一个id类型作为传入参数,并返回 NSMutableArray 类型的 block*。在返回时,我们返回了这个 block ,既 我们调用 muArr.add 之后得到了一个上述描述的 block ,然后追加(@"x"),则是调用这个 block,这个block返回了 muArr ,这样我们就可以在后续继续用点语法进行链式调用了 。在block中我们判断了一下添加的x是否为nil,以免崩溃发生。
链式编程在OC下实现的基本原理就是每个函数都返回一个以 self 为返回值的 block。
更多的例子可以参见 AutoLayout 库 Masonry。