iOS load方法探究

iOS load方法探究

之前對(duì)某個(gè)類(lèi)做Method Swilzzing都選擇在該類(lèi)的category中重寫(xiě)+ (void)load;方法, 相關(guān)方法交互的邏輯都寫(xiě)在該方法中.一直有一個(gè)疑惑,按照類(lèi)的方法加載方式, 多個(gè)category都重寫(xiě)一個(gè)方法,那最終只會(huì)有一個(gè)方法會(huì)被真正調(diào)用到.那在category重寫(xiě)load方法是不是會(huì)無(wú)效?

我們實(shí)際寫(xiě)個(gè)demo,從以下幾個(gè)問(wèn)題分析下load方法,來(lái)解答我們的疑惑!

  1. load方法什么時(shí)候調(diào)用

    創(chuàng)建一個(gè)LoadObject對(duì)象, 在其m文件中重寫(xiě)load方法, 同時(shí)在main函數(shù)中打印log

#import "LoadObject.h"

@implementation LoadObject

+ (void)load{
    NSLog(@"%s",__func__);
}

@end

int main(int argc, char * argv[]) {
    @autoreleasepool {
        NSLog(@"%s",__func__);
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

輸出:

2018-04-13 10:36:35.057750+0800 LoadMethodDemo[39024:1218412] +[LoadObject load]
2018-04-13 10:36:35.059119+0800 LoadMethodDemo[39024:1218412] main

結(jié)論: 類(lèi)的load方法的調(diào)用發(fā)生在app main函數(shù)之前

  1. category中重寫(xiě)load方法

    為L(zhǎng)oadObject類(lèi)添加叫One的category

// LoadObject+One.m
@implementation LoadObject (One)

+ (void)load{
    NSLog(@"%s",__func__);
}

@end

輸出:

2018-04-13 10:41:25.847033+0800 LoadMethodDemo[39127:1224463] +[LoadObject load]
2018-04-13 10:41:25.848094+0800 LoadMethodDemo[39127:1224463] +[LoadObject(One) load]
2018-04-13 10:41:25.848461+0800 LoadMethodDemo[39127:1224463] main

結(jié)論:
1. 類(lèi)本身的load方法和category方法都被調(diào)用了
2. 類(lèi)本身的load方法比category方法先調(diào)用

那我們?cè)囋嚩鄠€(gè)category都重寫(xiě)load方法

再添加一個(gè)category,并重寫(xiě)load方法

// LoadObject+Two.m" 

@implementation LoadObject (Two)

+ (void)load{
    NSLog(@"%s",__func__);
}

@end

輸出:

2018-04-13 10:44:56.270561+0800 LoadMethodDemo[39206:1228739] +[LoadObject load]
2018-04-13 10:44:56.274700+0800 LoadMethodDemo[39206:1228739] +[LoadObject(Two) load]
2018-04-13 10:44:56.275680+0800 LoadMethodDemo[39206:1228739] +[LoadObject(One) load]
2018-04-13 10:44:56.276437+0800 LoadMethodDemo[39206:1228739] main

結(jié)論: 所有分類(lèi)中的load方法都會(huì)被調(diào)用

  1. 父類(lèi)load方法

    創(chuàng)建LoadObject的子類(lèi)SubLoadObject, 并且為其添加兩個(gè)category, 分別重寫(xiě)load方法

//SubLoadObject.m

@implementation SubLoadObject

+ (void)load{
    NSLog(@"%s",__func__);
}

@end


#import "SubLoadObject+One.h"

@implementation SubLoadObject (One)

+ (void)load{
    NSLog(@"%s",__func__);
}

@end

#import "SubLoadObject+Two.h"

@implementation SubLoadObject (Two)

+ (void)load{
    NSLog(@"%s",__func__);
}

@end

輸出:

2018-04-13 10:50:32.572034+0800 LoadMethodDemo[39336:1233577] +[LoadObject load]
2018-04-13 10:50:32.573519+0800 LoadMethodDemo[39336:1233577] +[SubLoadObject load]
2018-04-13 10:50:32.573761+0800 LoadMethodDemo[39336:1233577] +[SubLoadObject(One) load]
2018-04-13 10:50:32.574037+0800 LoadMethodDemo[39336:1233577] +[SubLoadObject(Two) load]
2018-04-13 10:50:32.574282+0800 LoadMethodDemo[39336:1233577] +[LoadObject(Two) load]
2018-04-13 10:50:32.574532+0800 LoadMethodDemo[39336:1233577] +[LoadObject(One) load]
2018-04-13 10:50:32.575050+0800 LoadMethodDemo[39336:1233577] main

結(jié)論:

  1. 父類(lèi)的load方法先于子類(lèi)調(diào)用
  2. 所有類(lèi)本身的load方法先于category中的load方法調(diào)用
  3. category中的load方法調(diào)用順序好像隨機(jī)?

=========

總體結(jié)論:

  1. load方法調(diào)用發(fā)生在mian函數(shù)之前
  2. 類(lèi)本身load方法和category中的load方法都會(huì)被調(diào)用
  3. 類(lèi)本身load方法調(diào)用先于所有類(lèi)的category類(lèi)中的load方法調(diào)用

====

原理呢?
這個(gè)帖子原理講得非常詳細(xì)了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市孤个,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斥废,老刑警劉巖给郊,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淆九,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡饲窿,警方通過(guò)查閱死者的電腦和手機(jī)焕蹄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)淌哟,“玉大人辽故,你說(shuō)我怎么就攤上這事〉舫冢” “怎么了喂走?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵芋肠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我奈惑,道長(zhǎng)睡汹,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任原在,我火速辦了婚禮庶柿,結(jié)果婚禮上秽浇,老公的妹妹穿的比我還像新娘。我一直安慰自己兔辅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布维苔。 她就那樣靜靜地躺著介时,像睡著了一般。 火紅的嫁衣襯著肌膚如雪循衰。 梳的紋絲不亂的頭發(fā)上褐澎,一...
    開(kāi)封第一講書(shū)人閱讀 52,337評(píng)論 1 310
  • 那天工三,我揣著相機(jī)與錄音,去河邊找鬼奸鬓。 笑死掸读,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的澡罚。 我是一名探鬼主播姥闪,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼砌烁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了避归?” 一聲冷哼從身側(cè)響起管呵,我...
    開(kāi)封第一講書(shū)人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤敏释,失蹤者是張志新(化名)和其女友劉穎坷襟,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體廓奕,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蒸绩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年患亿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窍育。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡漱抓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恕齐,到底是詐尸還是另有隱情,我是刑警寧澤显歧,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布士骤,位于F島的核電站,受9級(jí)特大地震影響到旦,放射性物質(zhì)發(fā)生泄漏巨缘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一搁骑、第九天 我趴在偏房一處隱蔽的房頂上張望又固。 院中可真熱鬧,春花似錦娄周、人聲如沸沪停。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至郊闯,卻和暖如春蛛株,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背欢摄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工笋粟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绿淋。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓尝盼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親盾沫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉凸舵,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,726評(píng)論 0 9
  • Objective C類(lèi)方法load和initialize的區(qū)別過(guò)去兩個(gè)星期里,為了完成一個(gè)工作啊奄,接觸到了NSOb...
    亦晴工作室閱讀 1,327評(píng)論 0 10
  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,165評(píng)論 30 470
  • 2018年 2月11日 星期日 天氣晴 例行的多想夜晚菇夸。每次寫(xiě)下東西或者想寫(xiě)點(diǎn)什么的時(shí)候發(fā)現(xiàn)用心的去寫(xiě)才最動(dòng)人...
    圓圓不高閱讀 215評(píng)論 6 4
  • 自假期買(mǎi)了那沈三白的《浮生六記》以來(lái),常常使人愁的坐也不是鞠眉,站也不是。其中的緣由且聽(tīng)我慢慢道來(lái)械蹋。 買(mǎi)書(shū)...
    廿易閱讀 143評(píng)論 4 2