iOS - + initialize 與 +load(網(wǎng)絡(luò)摘抄)

學(xué)習(xí)推薦如下鏈接:http://www.reibang.com/p/9368ce9bb8f9

Objective-C 有兩個(gè)神奇的方法:+load 和 +initialize,這兩個(gè)方法在類被使用時(shí)會(huì)自動(dòng)調(diào)用。但是兩個(gè)方法的不同點(diǎn)會(huì)導(dǎo)致應(yīng)用層面上性能的顯著差異均牢。

一侧漓、+ initialize 方法和+load 調(diào)用時(shí)機(jī)

首先說(shuō)一下 + initialize 方法:蘋果官方對(duì)這個(gè)方法有這樣的一段描述:這個(gè)方法會(huì)在第一次初始化這個(gè)類之前被調(diào)用,我們用它來(lái)初始化靜態(tài)變量驾霜。

load 方法會(huì)在加載類的時(shí)候就被調(diào)用赶盔,也就是 ios 應(yīng)用啟動(dòng)的時(shí)候斤程,就會(huì)加載所有的類荸恕,就會(huì)調(diào)用每個(gè)類的 + load 方法乖酬。

運(yùn)行程序,我們看一下輸出日志:

2015-10-2715:21:07.545initialize[11637:334237] +[Person load]2015-10-2715:21:07.546initialize[11637:334237] +[Girl load]2015-10-2715:21:07.546initialize[11637:334237] main

這說(shuō)明在我并沒(méi)有對(duì)類做任何操作的情況下融求,+load 方法會(huì)被默認(rèn)執(zhí)行剑刑,并且是在 main 函數(shù)之前執(zhí)行的。

接下來(lái)我們來(lái)查看一下+ initialize方法双肤,先在 ViewController 中創(chuàng)建 Person 和 Girl 對(duì)象:

下面我們來(lái)看一下輸出日志:

2015-10-2715:33:56.195initialize[11711:342410] +[Person load]2015-10-2715:33:56.196initialize[11711:342410] +[Girl load]2015-10-2715:33:56.197initialize[11711:342410] main2015-10-2715:33:56.259initialize[11711:342410] +[Person initialize] Person2015-10-2715:33:56.259initialize[11711:342410] -[Person init]2015-10-2715:33:56.259initialize[11711:342410] -[Person init]2015-10-2715:33:56.259initialize[11711:342410] +[Girl initialize]2015-10-2715:33:56.260initialize[11711:342410] -[Girl init]2015-10-2715:33:56.260initialize[11711:342410] -[Girl init]

通過(guò)這個(gè)實(shí)驗(yàn)我們可以確定兩點(diǎn):

+ initialize方法類似一個(gè)懶加載施掏,如果沒(méi)有使用這個(gè)類,那么系統(tǒng)默認(rèn)不會(huì)去調(diào)用這個(gè)方法茅糜,且默認(rèn)只加載一次七芭;

+ initialize的調(diào)用發(fā)生在 +init 方法之前。

接下來(lái)再探究一下+ initialize在父類與子類之間的關(guān)系蔑赘,創(chuàng)建一個(gè)繼承自 Person 類的 Son類:

看一下輸出日志:

2015-10-2715:44:55.762initialize[12024:351576] +[Person load]2015-10-2715:44:55.764initialize[12024:351576] +[Son load]2015-10-2715:44:55.764initialize[12024:351576] +[Girl load]2015-10-2715:44:55.764initialize[12024:351576] main2015-10-2715:44:55.825initialize[12024:351576] +[Person initialize] Person2015-10-2715:44:55.825initialize[12024:351576] -[Person init]2015-10-2715:44:55.825initialize[12024:351576] -[Person init]2015-10-2715:44:55.826initialize[12024:351576] +[Person initialize] Son2015-10-2715:44:55.826initialize[12024:351576] -[Person init]

我們會(huì)發(fā)現(xiàn) Person 類的+ initialize方法又被調(diào)用了狸驳,但是查看一下是子類 Son 調(diào)用的,也就是創(chuàng)建子類的時(shí)候缩赛,子類會(huì)去調(diào)用父類的+ initialize方法耙箍。

二、總結(jié)

如果你實(shí)現(xiàn)了+ load方法酥馍,那么當(dāng)類被加載時(shí)它會(huì)自動(dòng)被調(diào)用辩昆。這個(gè)調(diào)用非常早。如果你實(shí)現(xiàn)了一個(gè)應(yīng)用或框架的+ load旨袒,并且你的應(yīng)用鏈接到這個(gè)框架上了汁针,那么+ load會(huì)在 main() 函數(shù)之前被調(diào)用。如果你在一個(gè)可加載的 bundle 中實(shí)現(xiàn)了+ load砚尽,那么它會(huì)在 bundle 加載的過(guò)程中被調(diào)用施无。

+ initialize方法的調(diào)用看起來(lái)會(huì)更合理,通常在它里面寫代碼比在+ load里寫更好必孤。+ initialize很有趣猾骡,因?yàn)樗菓姓{(diào)用的,也有可能完全不被調(diào)用敷搪。類第一次被加載時(shí)兴想,

+ initialize不會(huì)被調(diào)用。類接收消息時(shí)购啄,運(yùn)行時(shí)會(huì)先檢查+ initialize有沒(méi)有被調(diào)用過(guò)襟企。如果沒(méi)有嘱么,會(huì)在消息被處理前調(diào)用狮含。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末顽悼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子几迄,更是在濱河造成了極大的恐慌蔚龙,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件映胁,死亡現(xiàn)場(chǎng)離奇詭異木羹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)解孙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門坑填,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人弛姜,你說(shuō)我怎么就攤上這事脐瑰。” “怎么了廷臼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵苍在,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我荠商,道長(zhǎng)寂恬,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任莱没,我火速辦了婚禮初肉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饰躲。我一直安慰自己朴译,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布属铁。 她就那樣靜靜地躺著眠寿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪焦蘑。 梳的紋絲不亂的頭發(fā)上盯拱,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音例嘱,去河邊找鬼狡逢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拼卵,可吹牛的內(nèi)容都是我干的奢浑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼腋腮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼雀彼!你這毒婦竟也來(lái)了壤蚜?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤徊哑,失蹤者是張志新(化名)和其女友劉穎袜刷,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體莺丑,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡著蟹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梢莽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萧豆。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖昏名,靈堂內(nèi)的尸體忽然破棺而出炕横,到底是詐尸還是另有隱情,我是刑警寧澤葡粒,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布份殿,位于F島的核電站,受9級(jí)特大地震影響嗽交,放射性物質(zhì)發(fā)生泄漏卿嘲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一夫壁、第九天 我趴在偏房一處隱蔽的房頂上張望拾枣。 院中可真熱鬧,春花似錦盒让、人聲如沸梅肤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)姨蝴。三九已至,卻和暖如春肺缕,著一層夾襖步出監(jiān)牢的瞬間左医,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工同木, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浮梢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓彤路,卻偏偏與公主長(zhǎng)得像秕硝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洲尊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 一远豺、+ initialize 方法和+load 調(diào)用時(shí)機(jī) 首先說(shuō)一下 + initialize 方法:蘋果官方對(duì)這...
    指尖的跳動(dòng)閱讀 318評(píng)論 0 0
  • Objective-C 有兩個(gè)神奇的方法:+load 和 +initialize奈偏,這兩個(gè)方法在類被使用時(shí)會(huì)自動(dòng)調(diào)用...
    Mitchell閱讀 24,331評(píng)論 15 102
  • Objective C類方法load和initialize的區(qū)別過(guò)去兩個(gè)星期里,為了完成一個(gè)工作憋飞,接觸到了NSOb...
    亦晴工作室閱讀 1,309評(píng)論 0 10
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)姆吭,斷路器榛做,智...
    卡卡羅2017閱讀 134,600評(píng)論 18 139
  • 不知不覺(jué)已經(jīng)身處一個(gè)碎片化閱讀的時(shí)代。 看看那些公眾號(hào)的文章内狸,邏輯思維的論點(diǎn)检眯!看的時(shí)候會(huì)覺(jué)得挺有道理的,看過(guò)后就沒(méi)...
    五一Y閱讀 314評(píng)論 0 0