load方法和initialize方法類似點
1. 都只會呼叫一次
2. 父類在子類之前載入
複製**
不同點在於:
1. 載入時間不同,load方法在main()函式前進行呼叫,initialize在第一次呼叫類的所屬方法時在呼叫《可能永遠不呼叫》。
2. load方法不會被category覆蓋。
複製**
initialize原始碼
//向物件傳送訊息時,lookupimporforward函式判斷物件是否初始化,沒有初始化則先初始化在呼叫類的方法
imp lookupimporforward
(class cls, sel sel, id inst, bool initialize, bool cache, bo ol resolver)
;//第一次呼叫類
if (initialize && !cls->isinitialized())
// 第一次呼叫類的方法,初始化物件
void _class_initialize(class cls)
}if (reallyinitialize)
@try
@catch (...)
@finally
return;
}else
if (cls->isinitializing()) else
if (!multithreadedforkchild) else
}}複製**
iOS load方法與initialize方法
在 ios 開發中,我們經常會使用 load 方法來做一些在main函式之前的操作,比如方法交換 method swizzle 等。現在分析一下load方法跟initialize方法的呼叫順序以及區別。1.先看下load方法 嘗試定義乙個繼承自nsobject的person類,並對其新增兩個分類li...
load方法和 initialize方法的呼叫
一.load 方法 1.load 方法會在 runtime載入類 分類時呼叫 2.每個類 分類的 load 在程式執行過程中只呼叫一次 3.呼叫順序 3.1 先呼叫類的 load,按照編譯先後順序呼叫 先編譯,先呼叫 3.2呼叫子類的 load 之前會先呼叫父類的 load 3.3.再呼叫分類的 l...
初探 load和 initialize方法
void initialize訊息是在該類接收到其第乙個訊息之前呼叫。關於這裡的第乙個訊息需要特別說明一下,對於nsobject的runtime機制而言,其在呼叫nsobject的 void load訊息不被視為第乙個訊息,但是,如果像普通函式呼叫一樣直接呼叫nsobject的 void load訊...