鏈?zhǔn)骄幊蹋?/h2>
首先來(lái)看一個(gè)簡(jiǎn)單的鏈?zhǔn)秸{(diào)用例子:
我們可以通過(guò)點(diǎn)語(yǔ)法(getter方法)的方式調(diào)用
如果我們想要實(shí)現(xiàn)self.eat.work.play這種我們只要返回self就可以了薄榛。
如果想要傳參數(shù)的話讳窟,可以將block作為方法的返回值
Masonry源碼學(xué)習(xí):
Masonry其實(shí)就是封裝了系統(tǒng)的NSLayoutConstraint的方法,簡(jiǎn)化了代碼敞恋。
mas_makeConstraints方法在View的擴(kuò)展的方法中丽啡,在方法中初始化了maker對(duì)象,將view傳給maker中硬猫。maker的初始化方法中會(huì)保存view补箍,并初始化一個(gè)數(shù)組保存約束改执。
然后調(diào)用了傳入的block方法。
當(dāng)調(diào)用make.left的方法時(shí)坑雅,會(huì)調(diào)用以下圖中的方法
其實(shí)就是調(diào)用maker的constraint方法:
MasViewAttribute是約束屬性辈挂,對(duì)象中保存了約束屬性和view,對(duì)象中有判斷約束是否相同的方法裹粤。
MASViewConstraint是視圖約束终蒂,持有約束屬性。
這時(shí)遥诉,如果constraint是nil的話拇泣,就設(shè)置constraint.delegate為maker。
這里會(huì)返回constraint對(duì)象矮锈。
如果再次調(diào)用.top時(shí)霉翔,其實(shí)調(diào)用的是MASViewConstraint的方法。
這里的self.delegate = maker;其實(shí)調(diào)用的還是maker的方法愕难。核心方法早龟。
上圖核心方法中,會(huì)將這次約束和上次的約束方法數(shù)組中猫缭,生成組合視圖約束對(duì)象葱弟。然后再將約束的代理設(shè)置為maker。返回組合約束對(duì)象猜丹。之后返回組合約束對(duì)象芝加。
視圖對(duì)象添加約束的方法如下,代理依舊是maker射窒。這里用了MASConstraint對(duì)象藏杖,單個(gè)視圖和組合視圖都繼承于該對(duì)象。
這里最后還是調(diào)用maker代理方法脉顿。
install 方法調(diào)用MASViewConstraint 的install方法蝌麸,就是將系統(tǒng)約束添加到視圖上。
學(xué)習(xí):
- 鏈?zhǔn)骄幊贪保勺x性高来吩,代碼簡(jiǎn)潔,易維護(hù)蔽莱。
- 面向?qū)ο螅豪^承弟疆、封裝、多態(tài)盗冷。
- 工廠模式
- delegate: 使用代理可以達(dá)到核心代碼的重用怠苔。