OC 中l(wèi)oad和initialize的區(qū)別

+ (void)load;

+?(void)initialize;

load:load方法在這個文件被程序裝載時調用。只要是在Compile Sources中出現(xiàn)的文件總是會被裝載柬唯,這與這個類是否被用到無關锄奢,因此load方法總是在main函數(shù)之前調用。


int main(intargc,char* argv[]) {

@autoreleasepool{

NSLog(@"main");

returnUIApplicationMain(argc, argv,nil,NSStringFromClass([AppDelegateclass]));

}

+ (void)load{

NSLog(@"load");

}

+(void)initialize{

NSLog(@"initialize");

}


打印結果


一。load特點:

1.當這個類被引用到程序中书在,就會執(zhí)行一次這個類的load方法且只有一次。對于加入運行期系統(tǒng)中的每個類(class)及分類(category)來說栏账,都會調用此方法栈源,且只會調用一次。如果分類和其所屬的類都調用了load方法茶鹃,則先調用類里面的闭翩,再調用分類里的迄埃。

2.如果一個類實現(xiàn)了load方法,在調用這個方法前會首先調用父類的load方法侄非。而且這個過程是自動完成的彩库,并不需要我們手動實現(xiàn)骇钦。如果類里沒有l(wèi)oad方法,不管其父類有沒有l(wèi)oad方法眯搭,都不會在執(zhí)行子類load方法時執(zhí)行父類的load方法。


先執(zhí)行父類的load方法寇蚊,在執(zhí)行這個類的load方法

用途:比如說你想要自定義導航欄仗岸,那么你就可以用load方法

+ (void)load

{

UINavigationBar*navBar = [UINavigationBarappearanceWhenContainedIn:self,nil];

//只要是通過模型設置,都是通過富文本設置

//設置導航條標題=> UINavigationBar

NSMutableDictionary*attrs = [NSMutableDictionarydictionary];

attrs[NSFontAttributeName] = [UIFontboldSystemFontOfSize:20];

[navBarsetTitleTextAttributes:attrs];

//設置導航條背景圖片

[navBarsetBackgroundImage:[UIImageimageNamed:@"navigationbarBackgroundWhite"]forBarMetrics:UIBarMetricsDefault];

[navBarsetTitleTextAttributes:[NSDictionarydictionaryWithObjectsAndKeys:[UIColorwhiteColor],NSForegroundColorAttributeName,nil]];

}

二扒怖。initialize方法特點:

1. initialize的自然調用是在第一次主動使用當前類的時候业稼。只會調用一次。

2. 和load不同俯邓,即使子類不實現(xiàn)initialize方法熔号,會把父類的實現(xiàn)繼承過來調用一遍。注意的是在此之前川慌,父類的方法已經被執(zhí)行過一次了梦重,同樣不需要super調用亮瓷。

父類:

+(void)initialize{

NSLog(@"initializeParent--%@",[selfclass]);

}

子類:沒有實現(xiàn)initalize方法


打印結果看出調用了兩次父類的方法嘱支。

第一次是創(chuàng)建的父類對象執(zhí)行了這個方法,因為在創(chuàng)建子類對象前要先創(chuàng)建父類對象沛膳,第二次是子類繼承父類的方法執(zhí)行這個方法锹安。所以正確的寫法是:

+(void)initialize{

if(self==[ViewControllerclass]){

NSLog(@"initializeParent--%@",[selfclass]);

}

}

相同點:

1.load和initialize方法內部使用了鎖,因此它們是線程安全的叹哭。實現(xiàn)時要盡可能保持簡單风罩,避免阻塞線程,不要再使用鎖超升。

2.在不考慮開發(fā)者主動使用的情況下,系統(tǒng)最多會調用一次云石。

3.都不需要super研乒。

不同點:

1.load方法通常用來進行Method Swizzle,initialize方法一般用于初始化全局變量或靜態(tài)變量宽菜。

2.調用時間不同铅乡。

3.load不遵守繼承規(guī)則烈菌,即子類如果沒有l(wèi)oad方法,那么在要執(zhí)行子類load方法時不會執(zhí)行父類load方法挚赊。

initialize遵守繼承的規(guī)則济瓢,即子類不管有沒有這個方法旺矾,都會執(zhí)行父類的這個方法。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末嚎朽,一起剝皮案震驚了整個濱河市哟忍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖盼铁,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饶火,死亡現(xiàn)場離奇詭異,居然都是意外死亡当辐,警方通過查閱死者的電腦和手機缘揪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門找筝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慷吊,“玉大人,你說我怎么就攤上這事急鳄〖埠辏” “怎么了胞锰?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長顺饮。 經常有香客問我兼雄,道長,這世上最難降的妖魔是什么赦肋? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任囱井,我火速辦了婚禮庞呕,結果婚禮上住练,老公的妹妹穿的比我還像新娘愁拭。我一直安慰自己,他們只是感情好盏混,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布括饶。 她就那樣靜靜地躺著图焰,像睡著了一般蹦掐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卧抗,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天拙绊,我揣著相機與錄音标沪,去河邊找鬼金句。 笑死,一個胖子當著我的面吹牛吕嘀,可吹牛的內容都是我干的违寞。 我是一名探鬼主播贞瞒,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼趁曼!你這毒婦竟也來了军浆?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后救赐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年庆杜,在試婚紗的時候發(fā)現(xiàn)自己被綠了射众。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡晃财,死狀恐怖断盛,靈堂內的尸體忽然破棺而出伙菜,到底是詐尸還是另有隱情,我是刑警寧澤淑倾,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布勃救,位于F島的核電站蒙秒,受9級特大地震影響溉躲,放射性物質發(fā)生泄漏箭券。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掌动,春花似錦、人聲如沸眷射。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至麻蹋,卻和暖如春芳室,著一層夾襖步出監(jiān)牢的瞬間堪侯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工遇骑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翩肌,地道東北人兑宇。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓站玄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锉矢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內容