概念:像这样top.equalTo(self.view).offset(60)通过”点”语法,将需要执行的代码块连续的书写下去,就是链式编程.它能使代码简单易读,书写方便。
原理:保证每个方法执行之后,都返回对象本身,然后对象本身通过点语法再调用别的方法,以此实现链式执行。点语法其实是oc中取属性的一种语法。oc中比较神奇的一点是,即使没有属性,只有方法,点语法也可以把一个方法当做getter 方法来用,可以点式调用,像 property 一样。
代码:
@interface Test : NSObject
-(Test *)run;
-(Test * (^)(NSString *))testPrint;
@end
@implementation Test
-(Test *)run {
NSLog(@"----------------run-------------------");
return self;
}
-(Test * (^)(NSString *))testPrint {
return ^(NSString * str){
NSLog(@"----------------%@-------------------",str);
return self;
};
}
@end
Test *t = [[Test alloc]init];
t.run;
t.testPrint(@"000000000");
[t testPrint](@"3333333333333");
t.run.testPrint(@"1111111111");
[t run].testPrint(@"22222222222");
[[t run] testPrint](@"3333333333333");
t.run很好理解,直接调用了getter方法。-(Test *)run。而且返回了self对象。
t.testPrint(@"000000000"); 其实应该这样理解:t.testPrint (@"000000000")
t.testPrint 调用了getter方法,-(Test * (^)(NSString *))testPrint 返回了一个block。block后边加上带参数的括号,执行这个block,最后block执行完成之后返回了self对象。
这两点理解之后,下边的几个调用原理也就显而易见了。
总结:ios中链式编程是利用点语法实现的,在实际应用中,如果方法需要传参数,那么就可以用block的getter方法,如果不需要传参,就像例子中的run方法,可以不用block。具体怎么实现要看需求。
网友评论