ios load和initialize的區(qū)別

共同點(diǎn):

不考慮開(kāi)發(fā)者主動(dòng)使用的情況下,系統(tǒng)最多會(huì)調(diào)用一次
如果父類(lèi)和子類(lèi)都被調(diào)用,父類(lèi)的調(diào)用一定在子類(lèi)之前
都是為了應(yīng)用運(yùn)行提前創(chuàng)建合適的運(yùn)行環(huán)境(例如下面的懶加載字典)
在使用時(shí)都不要過(guò)重地依賴(lài)于這兩個(gè)方法,除非真正必要

區(qū)別:

一、load 類(lèi)方法

調(diào)用時(shí)機(jī)比較早,運(yùn)行環(huán)境有不確定因素。具體說(shuō)來(lái),在iOS上通常就是App啟動(dòng)時(shí)進(jìn)行加載,但當(dāng)load調(diào)用的時(shí)候,并不能保證所有類(lèi)都加載完成且可用,必要時(shí)還要自己負(fù)責(zé)做auto release處理。對(duì)于有依賴(lài)關(guān)系的兩個(gè)庫(kù)中,被依賴(lài)的類(lèi)的load會(huì)優(yōu)先調(diào)用。但在一個(gè)庫(kù)之內(nèi),調(diào)用順序是不確定的。
對(duì)于一個(gè)類(lèi)而言,沒(méi)有l(wèi)oad方法實(shí)現(xiàn)就不會(huì)調(diào)用,不會(huì)考慮對(duì)NSObject的繼承。一個(gè)類(lèi)的load方法不用寫(xiě)明[super load],父類(lèi)就會(huì)收到調(diào)用,并且在子類(lèi)之前。Category的load也會(huì)收到調(diào)用,但順序上在主類(lèi)的load調(diào)用之后,不會(huì)直接觸發(fā)initialize的調(diào)用。

二、initialize 類(lèi)方法(推薦使用)

initialize的自然調(diào)用是在 第一次主動(dòng)使用 當(dāng)前類(lèi) 的時(shí)候。
在initialize方法收到調(diào)用時(shí),運(yùn)行環(huán)境基本健全。
initialize的運(yùn)行過(guò)程中是能保證線程安全的。
和load不同,即使子類(lèi)不實(shí)現(xiàn)initialize方法,會(huì)把父類(lèi)的實(shí)現(xiàn)繼承過(guò)來(lái)調(diào)用一遍。注意的是在此之前,父類(lèi)的方法已經(jīng)被執(zhí)行過(guò)一次了,同樣不需要super調(diào)用。
由于initialize的這些特點(diǎn),使得其應(yīng)用比load要略微廣泛一些??捎脕?lái)做一些初始化工作,或者單例模式的一種實(shí)現(xiàn)方案。

執(zhí)行代碼順序

程序啟動(dòng) -> load(自動(dòng)調(diào)用) -> [MLAudioTool loadData] ->initialize(自動(dòng)調(diào)用) ->loadData

代碼演示

LLAudioTool.h

/** 靜態(tài)可變字典全局變量 */
static NSMutableDictionary *_allDataDict;

@implementation MLAudioTool

/** 程序剛啟動(dòng)就會(huì)調(diào)用這個(gè)方法 */
+(void)load{ 
     NSLog(@"--load---");
}

/** 當(dāng)在外面的控制器里執(zhí)行 [MLAudioTool loadData]; 會(huì)立馬執(zhí)行initialize方法 */
+(void)initialize{ 
    NSLog(@"--initialize---"); 
    _allDataDict = [NSMutableDictionary dictionary]; //初始化載字典
}

//加載數(shù)據(jù)
+(void)loadData{
     _allDataDict[@"key"] = @"lyz";

/** 如果不執(zhí)行initialize方法初始化字典的話,打印為null的*/ 
NSLog(@"%@",_allDataDict[@"key"]);
}

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

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

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