概念:像這樣top.equalTo(self.view).offset(60)通過”點”語法,將需要執(zhí)行的代碼塊連續(xù)的書寫下去,就是鏈?zhǔn)骄幊?它能使代碼簡單易讀,書寫方便。
原理:保證每個方法執(zhí)行之后,都返回對象本身,然后對象本身通過點語法再調(diào)用別的方法,以此實現(xiàn)鏈?zhǔn)綀?zhí)行。點語法其實是oc中取屬性的一種語法。oc中比較神奇的一點是,即使沒有屬性,只有方法,點語法也可以把一個方法當(dāng)做getter 方法來用,可以點式調(diào)用,像 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很好理解,直接調(diào)用了getter方法。-(Test *)run。而且返回了self對象。
t.testPrint(@"000000000"); 其實應(yīng)該這樣理解:t.testPrint (@"000000000")
t.testPrint 調(diào)用了getter方法,-(Test * (^)(NSString *))testPrint 返回了一個block。block后邊加上帶參數(shù)的括號,執(zhí)行這個block,最后block執(zhí)行完成之后返回了self對象。
這兩點理解之后,下邊的幾個調(diào)用原理也就顯而易見了。
總結(jié):ios中鏈?zhǔn)骄幊淌抢命c語法實現(xiàn)的,在實際應(yīng)用中,如果方法需要傳參數(shù),那么就可以用block的getter方法,如果不需要傳參,就像例子中的run方法,可以不用block。具體怎么實現(xiàn)要看需求。