Objective-C類初始化:load、initialize和init

+(void)load

*  在main之前,類被加載到系統(tǒng)時(shí)調(diào)用。

+(void)initialize

*  類首次收到消息時(shí)調(diào)用,若此類未被使用過,+(void)initialize就不會調(diào)用。
*  與+load方法類似的時(shí),在向子類發(fā)送initialize消息前,總是會先向父類發(fā)送initialize消息,如果父類尚未調(diào)用+initialize方法則調(diào)用。
*  如果父類中實(shí)現(xiàn)了+initialize方法,而子類中沒有重寫此方法,在子類收到消息的時(shí)候,會調(diào)用兩次initialize,一次是父類調(diào)用的,一次是子類調(diào)用的。
*  Category中的+initialize方法會覆蓋類本身的+initialize方法。

-(instancetype)init

*  類實(shí)例化(new)的時(shí)候就會調(diào)用一次。  [ClassName new]相當(dāng)于[[class alloc]init]
*  只要new一次,init就會調(diào)用一次,new多少次,init就調(diào)用多少次,但initialize只會調(diào)用一次
*  調(diào)用順序 load、initialize、init

總結(jié)

+(void)load和+(void)initialize、-(instancetype)init對比如下:

+(void)load +(void)initialize -(instancetype)init
調(diào)用時(shí)機(jī) 被添加到 runtime 時(shí) 收到第一條消息前,可能永遠(yuǎn)不調(diào)用 對象初始化時(shí)
調(diào)用順序 父類->子類->分類 父類->子類
調(diào)用次數(shù) 1次 多次 多次
是否需要顯式調(diào)用父類實(shí)現(xiàn)
是否沿用父類的實(shí)現(xiàn)
分類中的實(shí)現(xiàn) 類和分類都執(zhí)行 覆蓋類中的方法,只執(zhí)行分類的實(shí)現(xiàn)

另外:

*  視圖控制對象通過alloc和init來創(chuàng)建,但是視圖控制對象不會在創(chuàng)建的那一刻就馬上創(chuàng)建相應(yīng)的視圖,
而是等到需要使用的時(shí)候才通過調(diào)用loadView來創(chuàng)建,這樣的做法能提高內(nèi)存的使用率.

*  viewDidLoad-加載視圖

*  viewWillAppear-UIViewController對象的視圖即將加入窗口時(shí)調(diào)用;

*  viewDidApper-UIViewController對象的視圖已經(jīng)加入到窗口時(shí)調(diào)用;

*  viewWillDisappear-UIViewController對象的視圖即將消失、被覆蓋或是隱藏時(shí)調(diào)用;

*  viewDidDisappear-UIViewController對象的視圖已經(jīng)消失、被覆蓋或是隱藏時(shí)調(diào)用;

參考:偉哥

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容