Load和Initialize

這篇水文主要是昨晚無(wú)意看到網(wǎng)上有些關(guān)于這個(gè)問(wèn)題,卻瞎寫的。后面還一群評(píng)論求帶飛统刮。械馆。呜投。。。別誤人子弟好么

+ (void)load

第一,先看蘋果爸爸的文檔
https://developer.apple.com/documentation/objectivec/nsobject/1418815-load?language=objc

Discussion
The load message is sent to classes and categories that are both dynamically loaded and statically linked, but only if the newly loaded class or category implements a method that can respond.
The order of initialization is as follows:
All initializers in any framework you link to.
All +load methods in your image.
All C++ static initializers and C/C++ attribute(constructor) functions in your image.
All initializers in frameworks that link to you.
In addition:
A class’s +load method is called after all of its superclasses’ +load methods.
A category +load method is called after the class’s own +load method.
In a custom implementation of load you can therefore safely message other unrelated classes from the same image, but any load methods implemented by those classes may not have run yet.

上面寫明了父類先于子類調(diào)用殴胧,分類調(diào)用晚于主類,大前提都是需要復(fù)寫load方法佩迟。且系統(tǒng)只調(diào)用一次团滥。這個(gè)load不同于普通方法,系統(tǒng)在調(diào)用時(shí)候报强,子類重寫不會(huì)影響父類的方法灸姊,分類也不會(huì)影響主類的方法。也就是各有個(gè)的秉溉,互不影響力惯。
此外,load方法是在加載image的時(shí)候調(diào)用的坚嗜,比main方法還前夯膀,不用在這里做耗時(shí)操作诗充。
可以在Xcode中加入 OBJC_PRINT_LOAD_METHODS 并設(shè)置為 YES 后苍蔬,將會(huì)打印出很多 +load 方法執(zhí)行時(shí)的信息。

+ (void)initialize

先附上蘋果爸爸的文檔
https://developer.apple.com/documentation/objectivec/nsobject/1418639-initialize?language=occ

Discussion
The runtime sends initialize to each class in a program just before the class, or any class that inherits from it, is sent its first message from within the program. Superclasses receive this message before their subclasses.
The runtime sends the initialize message to classes in a thread-safe manner. That is, initialize is run by the first thread to send a message to a class, and any other thread that tries to send a message to that class will block until initialize completes.
The superclass implementation may be called multiple times if subclasses do not implement initialize—the runtime will call the inherited implementation—or if subclasses explicitly call [super initialize]. If you want to protect yourself from being run multiple times, you can structure your implementation along these lines:

+ (void)initialize {
   if (self == [ClassName self]) {
       // ... do the initialization ...
   }
}

有幾點(diǎn)要留意:
1蝴蜓、在首次用到這個(gè)類或這個(gè)類的子類的時(shí)候碟绑,會(huì)調(diào)用initialize俺猿。所以如果某個(gè)類一直沒(méi)用到,那么initialize就不會(huì)被調(diào)用格仲。
2押袍、每個(gè)類只會(huì)調(diào)用一次。(這里所說(shuō)的每個(gè)類凯肋,指的是以類名作為區(qū)分谊惭,分類和主類算同一個(gè)類。但是子類和父類算不同類)如果分類和主類都寫了initialize侮东。只會(huì)調(diào)用分類的圈盔。如果有多個(gè)分類都復(fù)寫了,調(diào)用的是在編譯順序最后的一個(gè)分類的悄雅。
3驱敲、如果子類沒(méi)有復(fù)寫initialize,那子類調(diào)用的時(shí)候就會(huì)按照父類的邏輯進(jìn)行調(diào)用宽闲,意思是:當(dāng)父類有分類復(fù)寫initialize众眨,那么調(diào)用父類分類的initialize,否則調(diào)用父類的initialize容诬。所以這里可能會(huì)導(dǎo)致父類的initialize被調(diào)用多次娩梨。

總結(jié)

1、能不用load览徒,就不用姚建,盡量都放到initialize去做。因?yàn)檫@個(gè)load會(huì)拖慢應(yīng)用啟動(dòng)吱殉。
2掸冤、initialize注意會(huì)被多次調(diào)用,且會(huì)受到分類的復(fù)寫影響友雳。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末稿湿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子押赊,更是在濱河造成了極大的恐慌饺藤,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件流礁,死亡現(xiàn)場(chǎng)離奇詭異涕俗,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)神帅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門再姑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人找御,你說(shuō)我怎么就攤上這事元镀∩芴睿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵栖疑,是天一觀的道長(zhǎng)讨永。 經(jīng)常有香客問(wèn)我,道長(zhǎng)遇革,這世上最難降的妖魔是什么卿闹? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮萝快,結(jié)果婚禮上比原,老公的妹妹穿的比我還像新娘。我一直安慰自己杠巡,他們只是感情好量窘,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著氢拥,像睡著了一般蚌铜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嫩海,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天冬殃,我揣著相機(jī)與錄音,去河邊找鬼叁怪。 笑死审葬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奕谭。 我是一名探鬼主播涣觉,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼血柳!你這毒婦竟也來(lái)了官册?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤难捌,失蹤者是張志新(化名)和其女友劉穎膝宁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體根吁,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡员淫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了击敌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片介返。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖愚争,靈堂內(nèi)的尸體忽然破棺而出映皆,到底是詐尸還是另有隱情挤聘,我是刑警寧澤轰枝,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布捅彻,位于F島的核電站,受9級(jí)特大地震影響鞍陨,放射性物質(zhì)發(fā)生泄漏步淹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一诚撵、第九天 我趴在偏房一處隱蔽的房頂上張望缭裆。 院中可真熱鬧,春花似錦寿烟、人聲如沸澈驼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缝其。三九已至,卻和暖如春徘六,著一層夾襖步出監(jiān)牢的瞬間内边,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工待锈, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漠其,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓竿音,卻偏偏與公主長(zhǎng)得像和屎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子春瞬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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