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