? ? ? 基于自動(dòng)布局的第三方庫 - Masonry,因?yàn)閕OS做屏幕適配約束的時(shí)候甩鳄,用純代碼寫的UI布局經(jīng)常用這個(gè)恬偷,但是底層還真是確實(shí)沒去了解,也不清楚為什么Masonry可以鏈?zhǔn)降牟粩嗟耐ㄟ^'.'去調(diào)用方法逢慌,但是這種事情悠轩,其實(shí)也不用特意為了面試去了解,因?yàn)槲腋杏X攻泼,當(dāng)知識(shí)積累到一定程度的時(shí)候火架,對(duì)這方面有探索的欲望的時(shí)候,自然就會(huì)想起了解去探究忙菠。
?基于Masonry用法:
這個(gè)make.left.mas_equalTo(self.view).mas_offset(10).... 專業(yè)名詞叫鏈?zhǔn)胶瘮?shù)何鸡。
但是我們知道,OC中我們常用的方法的調(diào)用都是 [self loadData]這種牛欢,"[]"調(diào)用骡男,至于“()”小括號(hào),印象中好像只有Block的調(diào)用會(huì)使用小括號(hào)傍睹。
Block想必學(xué)OC的沒人會(huì)不熟悉隔盛,簡單的Block格式
驗(yàn)證思路實(shí)現(xiàn):
1.新建一個(gè)Monkey(程序猿)的Object類,
2.聲明程序猿的兩個(gè)方法(工作work 和 玩play)
3.在ViewController中實(shí)現(xiàn)這兩個(gè)方法:
我們會(huì)發(fā)現(xiàn)焰望,由于我們的-play 和-work方法的返回值都是void骚亿,單獨(dú)執(zhí)行的時(shí)候,-play 和 ?-work都可以順利執(zhí)行熊赖,但是一旦形成鏈?zhǔn)降男问嚼赐溃鸵驗(yàn)榉祷刂祮栴}(是void),而無法繼續(xù)調(diào)用該方法:
4.設(shè)置方法的返回值-->如果 -play 執(zhí)行完,返回的是一個(gè)Monkey 對(duì)象俱笛,這個(gè)對(duì)象就可以繼續(xù)調(diào)用work方法--> [monkey work]:
-->此時(shí)發(fā)現(xiàn)捆姜,已經(jīng)可以實(shí)現(xiàn)鏈?zhǔn)降姆椒ㄕ{(diào)用了!但是是[]迎膜,不是()-->函數(shù)
5.此時(shí)Block就要派上用場(chǎng)了
-->注意泥技,這里的void并不是不需要返回值!
warning: control reaches end of non-void function
它的意思是:控制到達(dá)非void函數(shù)的結(jié)尾磕仅。就是說你的一些本應(yīng)帶有返回值的函數(shù)到達(dá)結(jié)尾后可能并沒有返回任何值珊豹。這時(shí)候,最好檢查一下是否每個(gè)控制流都會(huì)有返回值榕订。
1>.聲明一個(gè)Block
2>.調(diào)用Block-->為了實(shí)現(xiàn)函數(shù) “()”
我們發(fā)現(xiàn)店茶,可以實(shí)現(xiàn)函數(shù)了--> monkey.work2();但是不能實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用劫恒,因?yàn)檫@個(gè)Block的返回值是void贩幻,所有我們還必須做一下修改-->返回值屬性設(shè)置為Monkey對(duì)象
6.定義一個(gè)帶返回值(Monkey對(duì)象的Block)
7.實(shí)現(xiàn)鏈?zhǔn)?函數(shù) 的調(diào)用
小tips:-->注意為什么能一直調(diào)用:返回值類型!
小結(jié):當(dāng)然Block還有帶參數(shù)的两嘴,但是這里主要不是講Block丛楚,而是將一種學(xué)習(xí)方法,就是當(dāng)你要研究一個(gè)框架底層方法(例如:我這里的Masonry)憔辫,發(fā)現(xiàn)里面的寫法我們沒接觸過趣些,這時(shí)候就會(huì)促使我們?nèi)チ私猓ド钊敕∧K形覀€(gè)人感覺新手小白不一定要去特別深入地學(xué)習(xí)底層框架知識(shí)喧务,平時(shí)知道怎么使用就行,等到了一定的積累枉圃,對(duì)某些技術(shù)有興趣的時(shí)候功茴,這時(shí)候帶著疑問帶著興趣去學(xué),去了解底層方法的寫法(比如這里的鏈?zhǔn)胶瘮?shù))孽亲,事倍功半坎穿。