在研究Masonry源代碼之前,自己也嘗試書寫了一邊簡易版的Masonry狸棍,我寫的簡易版學(xué)習(xí)代碼可以去參考我的github源碼身害,實現(xiàn)絕大部分常用函數(shù)功能(當然肯定會有不少Bug),自己書寫一邊草戈,體會更深塌鸯,了解更透徹。剖開了Masonry源代碼之后唐片,令我印象最深的是鏈式函數(shù)書寫丙猬。
通常我們使用Masonry自動布局控件的時候使用點語法用起來非常方便流暢涨颜,但這是如何書寫的呢?
下面為大家講解一下:
1茧球,點語法需要在頭文件中聲明函數(shù)
image.png
此種方法就像我們平常使用getter函數(shù)一樣是直接獲取屬性值庭瑰。
2,為什么可以直接無限個點函數(shù)執(zhí)行
方式1:可以直接返回操作對象抢埋,然后利用對象繼續(xù)操作內(nèi)部函數(shù)弹灭,比如
image.png
top函數(shù)執(zhí)行完后直接返回MASContraintMaker對象
又或者
image.png
直接返回MASConstraint對象,從而可以無限調(diào)用對象對應(yīng)的操作函數(shù)揪垄。
方式2:(重點難點)
利用block
image.png
重點看一下這個函數(shù)是如何執(zhí)行的
我們一步一步分析:
step1:
左邊點語法的equalTo先獲取返回的block,注意先看返回的block穷吮,不要看括號里面的參數(shù)
step2:
看右邊block的實際返回是什么,
return ^id(id attribute) {
........
};
即
MASConstraint * (^)(id)
step3:
左邊block的參數(shù)是什么饥努?這時候看左邊的equalTo()里面的參數(shù)為@100捡鱼,賦值給右邊的attribute并執(zhí)行
step4:
return self.equalToWithRelation(attribute, NSLayoutRelationEqual);
執(zhí)行內(nèi)部函數(shù)并且返回實例對象(MASConstraint *),執(zhí)行完畢返回的該對象就可以繼續(xù)執(zhí)行其他的內(nèi)部函數(shù)了酷愧。
不知道你看懂了沒驾诈,多看幾遍多琢磨幾遍就可以看懂了,這個鏈式函數(shù)有點繞溶浴。