IOS +load和+initialize方法原理詳解及區(qū)別

+load方法:

  • +load方法是通過函數(shù)指針地址來調(diào)用的静浴。
  • +load方法會在runtime加載類窟哺、分類時調(diào)用,在程序運行過程中只調(diào)用一次牡拇。
  • 調(diào)用順序:
    1. 先調(diào)用類的+load方法骡送。
    按照編譯先后的順序調(diào)用蔓肯。(先編譯稚失,先調(diào)用)
    調(diào)用子類的+load之前會先調(diào)用父類的+load方法搀绣。
    2. 再調(diào)用分類的+load方法飞袋。
    所有的分類都是按照編譯先后的順序調(diào)用。(先編譯链患,先調(diào)用)

+initialize方法:

  • +initialize方法是通過objc_msgSend(消息發(fā)送機制)來調(diào)用巧鸭。
  • +initialize方法是會在類第一次接收到消息時調(diào)用,在程序運行過程中只調(diào)用一次锣险,如果沒有接受到消息蹄皱,則該方法就不會被調(diào)用览闰。
  • 調(diào)用順序:
    如果分類中實現(xiàn)了+initialize方法芯肤,就直接調(diào)用分類的+initialize方法。
    如果分類中沒有實現(xiàn)+initialize方法压鉴,先調(diào)用父類的+initialize方法崖咨,再調(diào)用子類的+initialize方法。(先初始化父類油吭,再初始化子類击蹲,每個類只會初始化一次)
    如果子類中沒有實現(xiàn)+initialize方法署拟,會直接調(diào)用父類的+initialize方法。(所以父類的+initialize方法可能會被調(diào)用多次)歌豺。

+load方法和+initialize的區(qū)別:

調(diào)用方式:

  • +load方法:
    是通過函數(shù)指針地址來調(diào)用的推穷。
  • initialize方法:
    是通過objc_msgSend(消息發(fā)送機制)來調(diào)用。

調(diào)用時刻:

  • +load方法:
    是在runtime加載類类咧、分類時調(diào)用馒铃,在程序運行過程中只調(diào)用一次。
  • +initialize方法:
    是在類第一次收到消息時調(diào)用痕惋,在程序運行過程中区宇,如果該類沒有收到消息,那么+initialize方法也不會被調(diào)用值戳。如果子類中沒有實現(xiàn)+initialize方法议谷,會直接調(diào)用父類的+initialize方法。所以父類的+initialize方法可能會被調(diào)用多次堕虹,子類中的+initialize方法只調(diào)用一次卧晓。

調(diào)用順序:

  • +load方法:
    1. 先調(diào)用類的+load方法。先編譯的類赴捞,優(yōu)先調(diào)用+load方法禀崖;調(diào)用子類的+load方法之前,會先調(diào)用父類的+load方法螟炫。
    2. 再調(diào)用分類的+load方法波附。先編譯的分類,優(yōu)先調(diào)用+load方法昼钻。
  • +initialize方法:
    如果存在分類掸屡,直接調(diào)用分類的+initialize方法。
    如果不存在分類然评,則優(yōu)先調(diào)用父類的+initialize方法仅财,再調(diào)用子類的+initialize方法。(父類中的+initialize方法有可能會被多次調(diào)用)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載碗淌,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者盏求。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市亿眠,隨后出現(xiàn)的幾起案子碎罚,更是在濱河造成了極大的恐慌,老刑警劉巖纳像,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荆烈,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機憔购,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門宫峦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人玫鸟,你說我怎么就攤上這事导绷。” “怎么了屎飘?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵诵次,是天一觀的道長。 經(jīng)常有香客問我枚碗,道長逾一,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任肮雨,我火速辦了婚禮遵堵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怨规。我一直安慰自己陌宿,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布波丰。 她就那樣靜靜地躺著壳坪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掰烟。 梳的紋絲不亂的頭發(fā)上爽蝴,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音纫骑,去河邊找鬼蝎亚。 笑死,一個胖子當(dāng)著我的面吹牛先馆,可吹牛的內(nèi)容都是我干的发框。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼煤墙,長吁一口氣:“原來是場噩夢啊……” “哼梅惯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起仿野,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤铣减,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后设预,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體徙歼,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡犁河,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年鳖枕,在試婚紗的時候發(fā)現(xiàn)自己被綠了魄梯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡宾符,死狀恐怖酿秸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情魏烫,我是刑警寧澤辣苏,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站哄褒,受9級特大地震影響稀蟋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呐赡,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一退客、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧链嘀,春花似錦萌狂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至霹琼,卻和暖如春务傲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枣申。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工树灶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人糯而。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓天通,卻偏偏與公主長得像,于是被迫代替她去往敵國和親熄驼。 傳聞我的和親對象是個殘疾皇子像寒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

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

  • iOS開發(fā)中總能看到+load和+initialize的身影,網(wǎng)上對于這兩個方法有很多解釋,但有些細節(jié)不夠清楚,不...
    木子雨廷t閱讀 1,234評論 0 8
  • + (void) load; 如果一個類實現(xiàn)了load方法,在調(diào)用這個方法前會首先調(diào)用父類的load方法瓜贾。而且這個...
    許暹羅閱讀 349評論 0 0
  • 一. +load方法 1. +load方法調(diào)用順序 調(diào)用時機:+load方法會在Runtime加載類诺祸、分類時調(diào)用。...
    Imkata閱讀 687評論 0 2
  • 在iOS中祭芦,所有的類都繼承自NSObject筷笨,我們來看一下初始化相關(guān)的幾個方法 OBJC_SWIFT_UNAVAI...
    cdcyd閱讀 1,975評論 1 6
  • iOS開發(fā)中總能看到+load和+initialize的身影,網(wǎng)上對于這兩個方法有很多解釋,官方也有說明,但有些細...
    朱曉輝閱讀 27,422評論 19 139