+load和+initialize

iOS開發(fā)面試時經(jīng)常被問到,+load方法和+initialize方法糠赦。今天主要用源碼分析下各自的調(diào)用機制。

+load方法

當(dāng)APP啟動的時候,dyld便會開始加載庫和鏈接庫骑冗。load_images這個函數(shù)便會執(zhí)行,這個函數(shù)就會執(zhí)行+load方法先煎。

圖一

這里邊有兩個重要的函數(shù):prepare_load_methodscall_load_methods,一個是準備load方法沐旨,一個是調(diào)用load方法。

1.prepare_load_methods方法

圖二

在準備load方法里邊又分為獲取類的load表和獲取分類的load表榨婆。

1.獲取類的load表
圖三

圖四
  1. 進入schedule_class_load函數(shù)磁携,將會遞歸的找到父類一直到NSObject。
  2. 將重載load方法的類添加到loadable_classes這個表里良风,按從父類到子類的順序谊迄。沒有重載load方法的類忽略闷供。
2.獲取分類的load表

圖五

將所有重載load方法的分類加入到loadable_categories表里邊,沒有重載load方法的分類忽略统诺。

2.call_load_methods方法

圖六

call_load_methods函數(shù)可以看到歪脏,先執(zhí)行了類的load方法調(diào)用,然后才執(zhí)行了分類的load方法調(diào)用粮呢。

3.+load方法總結(jié)

  1. +load方法在mian函數(shù)之前調(diào)用婿失,因為dyld完成之后才會到main函數(shù)。
  2. 自動調(diào)用且由系統(tǒng)統(tǒng)一調(diào)用啄寡。
  3. 執(zhí)行順序:先是父類豪硅,然后是子類,最后才是分類挺物。

+initialize方法

圖七

給+initialize方法加入斷點懒浮,可以很清楚的看到initialize方法是在main函數(shù)之后執(zhí)行的,且是被動調(diào)用的,因為它走的是發(fā)送消息流程的流程。
圖八

當(dāng)這個已經(jīng)初始化且沒有發(fā)送過initialize方法時,就會執(zhí)行_class_initialize函數(shù)识藤。這個函數(shù)有三個主要邏輯:如下四張圖.
圖九

圖十

圖十一

圖十二

  1. 遞歸的查找父類砚著,直到NSObject類。
  2. +initialize方法只能被調(diào)用一次痴昧。
  3. 調(diào)用順序:
  • 父類有子類都有分類:先是父類的分類,再是子類的分類
  • 父類沒有分類子類有分類:先是父類,再是子類的分類
  • 父類有分類子類沒有:先是父類的分類,再是子類
  • 父類子類都沒有:先是父類,再是子類稽穆。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赶撰,隨后出現(xiàn)的幾起案子秧骑,更是在濱河造成了極大的恐慌,老刑警劉巖扣囊,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乎折,死亡現(xiàn)場離奇詭異,居然都是意外死亡侵歇,警方通過查閱死者的電腦和手機骂澄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惕虑,“玉大人坟冲,你說我怎么就攤上這事±D瑁” “怎么了健提?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長伟叛。 經(jīng)常有香客問我私痹,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任紊遵,我火速辦了婚禮账千,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘暗膜。我一直安慰自己匀奏,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布学搜。 她就那樣靜靜地躺著娃善,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瑞佩。 梳的紋絲不亂的頭發(fā)上聚磺,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音钉凌,去河邊找鬼。 笑死捂人,一個胖子當(dāng)著我的面吹牛御雕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滥搭,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼酸纲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瑟匆?” 一聲冷哼從身側(cè)響起闽坡,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎愁溜,沒想到半個月后疾嗅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡冕象,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年代承,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渐扮。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡论悴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出墓律,到底是詐尸還是另有隱情膀估,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布耻讽,位于F島的核電站察纯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捐寥,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一笤昨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧握恳,春花似錦瞒窒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至束昵,卻和暖如春拔稳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锹雏。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工巴比, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人礁遵。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓轻绞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親佣耐。 傳聞我的和親對象是個殘疾皇子政勃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

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