iOS load和initalize

之前一直覺(jué)得很復(fù)雜,今天研究了下,其實(shí)不算復(fù)雜(不要怕麻煩),記住這幾點(diǎn)就夠了:

load

load就是類(lèi)的加載,一個(gè)項(xiàng)目啟動(dòng),項(xiàng)目中的所有的類(lèi)就會(huì)調(diào)用load方法,即每個(gè)類(lèi)都會(huì)調(diào)用自己的load方法,包括分類(lèi),但只會(huì)被調(diào)用一次。這里有一點(diǎn)不明白就是調(diào)用的順序有什么講究(不按添加的時(shí)間順序,也不按字母順序),我先記下來(lái)。

initalize

initalize的調(diào)用則是在該類(lèi)第一次被使用時(shí),會(huì)被調(diào)用,也只會(huì)被調(diào)用一次,那么有哪些情況呢?

  • 初始化一個(gè)自己的類(lèi)的對(duì)象(準(zhǔn)確說(shuō),是使用,這里是便于理解);
  • 初始化一個(gè)子類(lèi)(準(zhǔn)確說(shuō),是使用,這里是便于理解),而且不管是否調(diào)用[super init],只要是使用;
    但是要注意,如果該類(lèi)有分類(lèi),并且在分類(lèi)中重寫(xiě)了initalize方法,那么就只會(huì)調(diào)用分類(lèi)中的initalize方法了。

具體Demo如下圖,首先,文件結(jié)構(gòu)如圖:

所有文件.png

Son1繼承自Father類(lèi),Other繼承NSObject,整個(gè)工程,我僅初始化Son1Other,一共創(chuàng)建3個(gè)對(duì)象。

控制臺(tái)輸出結(jié)果如下:

調(diào)用順序.png

可以看到,工程中所有的類(lèi)都調(diào)用了load方法,比如沒(méi)有被使用的AAASSS類(lèi),我在Son1Father兩個(gè)類(lèi)以及這兩個(gè)類(lèi)的分類(lèi)都重寫(xiě)了load方法,都在類(lèi)的加載時(shí)被調(diào)用了,當(dāng)初始化一個(gè)Son1對(duì)象時(shí),因?yàn)?code>Son1繼承自Father類(lèi),所以使用到了Father類(lèi),Father類(lèi)的initalize方法就先被調(diào)用了,然后再是Son1initalize方法被調(diào)用,但是我在Son1的分類(lèi),也就是Son1+Extension.m這個(gè)文件中又重寫(xiě)了initalize方法,因此分類(lèi)的優(yōu)先級(jí)更高,只調(diào)用了Son1的分類(lèi)的initalize方法。Other類(lèi)使用了兩次,但Other類(lèi)的initalize方法僅被調(diào)用一次。最后,因?yàn)轫?xiàng)目沒(méi)有使用AAASSS兩個(gè)類(lèi),因此這兩個(gè)類(lèi)的initalize方法沒(méi)有被調(diào)用。

最后編輯于
?著作權(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)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評(píng)論 19 139
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,099評(píng)論 0 9
  • load,再啟動(dòng)之前調(diào)用 1:父類(lèi) 2:子類(lèi) 3:分類(lèi) 根據(jù)函數(shù)地址調(diào)用 initialize,在初次使用類(lèi)對(duì)象的...
  • Objective C類(lèi)方法load和initialize的區(qū)別過(guò)去兩個(gè)星期里,為了完成一個(gè)工作,接觸到了NSOb...
    亦晴工作室閱讀 1,456評(píng)論 0 10
  • 讀研的表弟今年畢業(yè)了。當(dāng)初填專(zhuān)業(yè)志愿的時(shí)候,我給他的第一個(gè)意見(jiàn)就是興趣和愛(ài)好最重要。 表弟聽(tīng)從了我的意見(jiàn),選擇了自...
    木木有光閱讀 553評(píng)論 3 1

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