學(xué)Masonry源碼時(shí)皂冰,對(duì)閉包的一些感悟

Masonry 是什么

Masonry簡(jiǎn)介

Masonry 是一個(gè)基于AutoLayout的開(kāi)源庫(kù)歇竟,GitHub
Masorny
, 它實(shí)了用鏈?zhǔn)秸Z(yǔ)法來(lái)進(jìn)行自動(dòng)布局。

例子

舉個(gè)栗子伐谈,就是下面這樣使用

someView = [[UIView alloc] init]; 
[someView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self.view); // line 1
        make.size.mas_equalTo(CGSizeMake(250, 250)); // line 2
}];

這段代碼,就是讓someView,位于self.view的中間贾陷,且大小為(250逮京,250)卿堂,是不是很簡(jiǎn)潔,而且鏈?zhǔn)秸Z(yǔ)法看著非常的舒服懒棉。

鏈?zhǔn)秸Z(yǔ)法如何實(shí)現(xiàn)的草描?

閉包@缆獭!陶珠!
我們來(lái)看line 1的代碼挟裂,make.center.equalTo(self.view);

  • make 從上面的代碼可以看出是一個(gè)MASConstraintMaker對(duì)象
  • center是MASConstraintMaker的一個(gè)屬性,通過(guò)點(diǎn)語(yǔ)法拿到center以后揍诽,center是一個(gè)MASConstraint對(duì)象(是什么對(duì)象不重要诀蓉,重要的是這個(gè)是一個(gè)對(duì)象,有對(duì)象就有方法)
  • equalTo是MASConstraint對(duì)象中的一個(gè)實(shí)例方法暑脆,實(shí)現(xiàn)如下
- (MASConstraint * (^)(id))equalTo {
    return ^id(id attribute) {
        return self.equalToWithRelation(attribute, NSLayoutRelationEqual);
    };
}
  • 這個(gè)方法渠啤,沒(méi)有參數(shù),返回值是一個(gè)類型為(MASConstraint * (^)(id))添吗,即返回值是MASConstraint對(duì)象沥曹,接受一個(gè)id類型參數(shù)的閉包(有點(diǎn)繞,反正重點(diǎn)就是碟联,這個(gè)方法妓美,返回一個(gè)閉包)。
  • 然后這里作者沒(méi)用用[]調(diào)用equalto這方法鲤孵,而是用的點(diǎn)語(yǔ)法來(lái)調(diào)用的這個(gè)方法壶栋,是因?yàn)镺C中雖然推薦只有對(duì)象屬性的get、set方法使用點(diǎn)語(yǔ)法普监,其實(shí)一般的示例方法也是可以用點(diǎn)語(yǔ)法這樣做的贵试。但不推薦大家這樣做了。
//這里再說(shuō)一下 如果用[]怎么訪問(wèn)這個(gè)閉包
// make.center.equalTo(self.view);
[make.center equalTo](self.view);
// equelTo這個(gè)方法只是返回一個(gè)閉包凯正,這個(gè)閉包調(diào)用毙玻,需要你用小括號(hào),去調(diào)用廊散。
  • 再來(lái)說(shuō)下這個(gè)閉包桑滩。這個(gè)閉包
    • 返回值是MASConstraint對(duì)象,接受一個(gè)id類型參數(shù)允睹,首先這個(gè)返回值施符,可以對(duì)其繼續(xù)訪問(wèn)相應(yīng)的屬性,然后訪問(wèn)相應(yīng)的方法擂找。
    • 參數(shù)傳入閉包中戳吝,調(diào)用了類的一個(gè)私有方法。

總結(jié)一下

是不是看完感覺(jué)有點(diǎn)亂贯涎,沒(méi)關(guān)系听哭,我也有點(diǎn)亂。其實(shí)總結(jié)一下鏈?zhǔn)秸Z(yǔ)法就是這樣實(shí)現(xiàn)的

  1. OC中的屬性get、set方法陆盘,以及普通實(shí)例方法都可以通過(guò)點(diǎn)語(yǔ)法來(lái)訪問(wèn)普筹。
  2. 使用一個(gè)返回閉包的示例方法,閉包返回類型為一個(gè)對(duì)象隘马。
  3. 通過(guò)點(diǎn)語(yǔ)法調(diào)用這個(gè)示例方法太防,這個(gè)時(shí)候它是一個(gè)閉包,然后通過(guò)小括號(hào)調(diào)用這個(gè)閉包酸员,這個(gè)時(shí)候它是一個(gè)對(duì)象蜒车,然后又可以通過(guò)這個(gè)對(duì)象的其他方法,這樣循環(huán)調(diào)用下去
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末幔嗦,一起剝皮案震驚了整個(gè)濱河市酿愧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌邀泉,老刑警劉巖嬉挡,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異汇恤,居然都是意外死亡庞钢,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門因谎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)基括,“玉大人,你說(shuō)我怎么就攤上這事蓝角。” “怎么了饭冬?”我有些...
    開(kāi)封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵使鹅,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我昌抠,道長(zhǎng)患朱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任炊苫,我火速辦了婚禮裁厅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘侨艾。我一直安慰自己执虹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布唠梨。 她就那樣靜靜地躺著袋励,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茬故,一...
    開(kāi)封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天盖灸,我揣著相機(jī)與錄音,去河邊找鬼磺芭。 笑死赁炎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钾腺。 我是一名探鬼主播徙垫,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼垮庐!你這毒婦竟也來(lái)了松邪?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤哨查,失蹤者是張志新(化名)和其女友劉穎逗抑,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寒亥,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邮府,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了溉奕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褂傀。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖加勤,靈堂內(nèi)的尸體忽然破棺而出仙辟,到底是詐尸還是另有隱情,我是刑警寧澤鳄梅,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布叠国,位于F島的核電站,受9級(jí)特大地震影響戴尸,放射性物質(zhì)發(fā)生泄漏粟焊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一孙蒙、第九天 我趴在偏房一處隱蔽的房頂上張望项棠。 院中可真熱鬧,春花似錦挎峦、人聲如沸香追。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)翅阵。三九已至歪玲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掷匠,已是汗流浹背滥崩。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留讹语,地道東北人钙皮。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像顽决,于是被迫代替她去往敵國(guó)和親短条。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Masonry是iOS在控件布局中經(jīng)常使用的一個(gè)輕量級(jí)框架才菠,Masonry讓NSLayoutConstraint使...
    丘比沙拉閱讀 3,181評(píng)論 2 19
  • (一)Masonry介紹 Masonry是一個(gè)輕量級(jí)的布局框架 擁有自己的描述語(yǔ)法 采用更優(yōu)雅的鏈?zhǔn)秸Z(yǔ)法封裝自動(dòng)布...
    木易林1閱讀 2,334評(píng)論 0 3
  • Masonry是一個(gè)輕量級(jí)的布局框架茸时,擁有自己的描述語(yǔ)法,采用更優(yōu)雅的鏈?zhǔn)秸Z(yǔ)法封裝自動(dòng)布局赋访,簡(jiǎn)潔明了并具有高可讀性...
    3dcc6cf93bb5閱讀 1,765評(píng)論 0 1
  • Masonry 是一個(gè)輕量級(jí)自動(dòng)布局框架可都,開(kāi)發(fā)者可以使用更簡(jiǎn)潔的鏈?zhǔn)秸Z(yǔ)法為控件進(jìn)行布局。Masonry 的使用可以...
    jing37閱讀 360評(píng)論 0 0
  • 應(yīng)試教育走了三十年蚓耽,大家由仰望變成現(xiàn)在的批判渠牲、逃離。在仰望的年代里步悠,通過(guò)應(yīng)試教育改變了許多人的命...
    于艾湘閱讀 701評(píng)論 0 4