load和initialize方法詳解

2021-10-10 22:55:08 字數 947 閱讀 9431

問題

1.load方法什麼時候呼叫

2.load方法呼叫原理

3.load方法呼叫順序

4.load方法呼叫次數

結論

+load方法會在runtime載入類,分類時呼叫每個類,分類的+laod方法,在程式執行過程中只呼叫一次。

+load方法是根據方法位址呼叫,並不是objc——msgsend函式呼叫

+load方法是在main函式之前呼叫

呼叫順序

先呼叫類的+load

按照編譯先後順序呼叫(先編譯,先呼叫)

呼叫子類的+load之前會先呼叫父類的+load再呼叫分類的+load

子類的+load方法也是先編譯先呼叫

問題

1.initialize方法s什麼時候呼叫

2.initialize方法呼叫原理

3.initialize方法呼叫順序

4.initialize方法呼叫次數

結論:

+initialize方法會在類第一次接受訊息時呼叫

+initialize訊息傳送機制(objc_msgsend)

呼叫順序

先呼叫父類的initialize,再呼叫子類的initialize(先初始化分類,再初始化子類,每個類只會初始化一次)

+initialize設+load的很大的區別是,+initialize是通過objc_msgsend進行呼叫的,所以有以下特點:如果子類沒有實現+initialize,會呼叫父類的+initialize(所以父類的+initialize可能會被呼叫多次),如果是分類實現了+initialize,就覆蓋類本身的initialize的呼叫

摘自:

load和initialize的不同

import constants.h implementation constants void initialize void load endload,是載入類的時候,這裡是constants類,就會呼叫。也就是說,ios應用啟動的時候,就會載入所有的類的 void load方法。這樣有個缺點,...

iOS 比較load和initialize方法

ios中,類需要執行初始化操作才能正常使用。繼承於nsobject的類有兩種實現初始化類的方法 load initialize方法。void load 對於加入執行期的類或分類來說,如果該類實現了load方法,必定會呼叫此方法,且只呼叫一次。當包含類或分類的程式載入系統時,會執行該方法,一般都是程式...

load 和 initialize 的區別

1 只要程式啟動就會將所有類的 載入到記憶體中 在 main 函式執行之前 放到 區 無論該類有沒有被使用到都會被呼叫 2 load 方法會在當前類被載入到記憶體的時候呼叫 有且僅會呼叫一次 3 當父類和子類都實現 load 方法時,會先呼叫父類的 load 方法,再呼叫子類的 load方法4 先載...