之前一直覺(jué)得很復(fù)雜官扣,今天研究了下,其實(shí)不算復(fù)雜(不要怕麻煩)羞福,記住這幾點(diǎn)就夠了:
load
load
就是類的加載惕蹄,一個(gè)項(xiàng)目啟動(dòng),項(xiàng)目中的所有的類就會(huì)調(diào)用load
方法治专,即每個(gè)類都會(huì)調(diào)用自己的load
方法卖陵,包括分類,但只會(huì)被調(diào)用一次看靠。這里有一點(diǎn)不明白就是調(diào)用的順序有什么講究(不按添加的時(shí)間順序赶促,也不按字母順序),我先記下來(lái)挟炬。
initalize
initalize
的調(diào)用則是在該類第一次被使用時(shí)鸥滨,會(huì)被調(diào)用,也只會(huì)被調(diào)用一次谤祖,那么有哪些情況呢婿滓?
- 初始化一個(gè)自己的類的對(duì)象(準(zhǔn)確說(shuō),是使用粥喜,這里是便于理解)凸主;
- 初始化一個(gè)子類(準(zhǔn)確說(shuō),是使用额湘,這里是便于理解)卿吐,而且不管是否調(diào)用
[super init]
,只要是使用锋华;
但是要注意嗡官,如果該類有分類,并且在分類中重寫了initalize
方法毯焕,那么就只會(huì)調(diào)用分類中的initalize
方法了衍腥。
具體Demo如下圖,首先,文件結(jié)構(gòu)如圖:
Son1
繼承自Father
類婆咸,Other
繼承NSObject
竹捉,整個(gè)工程,我僅初始化Son1
和Other
尚骄,一共創(chuàng)建3個(gè)對(duì)象块差。
控制臺(tái)輸出結(jié)果如下:
可以看到,工程中所有的類都調(diào)用了load
方法倔丈,比如沒(méi)有被使用的AAA
和SSS
類憾儒,我在Son1
和Father
兩個(gè)類以及這兩個(gè)類的分類都重寫了load
方法乃沙,都在類的加載時(shí)被調(diào)用了,當(dāng)初始化一個(gè)Son1
對(duì)象時(shí)警儒,因?yàn)?code>Son1繼承自Father
類训裆,所以使用到了Father
類蜀铲,Father
類的initalize
方法就先被調(diào)用了,然后再是Son1
的initalize
方法被調(diào)用记劝,但是我在Son1
的分類,也就是Son1+Extension.m
這個(gè)文件中又重寫了initalize
方法厌丑,因此分類的優(yōu)先級(jí)更高,只調(diào)用了Son1
的分類的initalize
方法怒竿。Other
類使用了兩次砍鸠,但Other
類的initalize
方法僅被調(diào)用一次。最后耕驰,因?yàn)轫?xiàng)目沒(méi)有使用AAA
和SSS
兩個(gè)類爷辱,因此這兩個(gè)類的initalize
方法沒(méi)有被調(diào)用。