load
load 函數(shù)是當(dāng)類或分類(Category)被加載到 Objective-C runtime 時(shí)(就是被引用的時(shí)候)被調(diào)用的,實(shí)現(xiàn)這個(gè)方法可以讓我們在類加載的時(shí)候執(zhí)行一些類相關(guān)的行為罕邀。當(dāng)類被引用進(jìn)項(xiàng)目的時(shí)候就會(huì)執(zhí)行 load 函數(shù)(在 main 函數(shù)開始執(zhí)行之前)往扔,與這個(gè)類是否被用到無關(guān)逾礁,每個(gè)類的 load 函數(shù)只會(huì)自動(dòng)調(diào)用一次移宅。load 函數(shù)調(diào)用特點(diǎn)如下:
- 當(dāng)父類和子類都實(shí)現(xiàn) load 函數(shù)時(shí)鲫售,二者的 load 方法都會(huì)被調(diào)用硝拧,父類的 load 方法執(zhí)行順序要優(yōu)先于子類径筏。
- 當(dāng)子類未實(shí)現(xiàn) load 方法時(shí)葛假,在加載該子類時(shí),不會(huì)去調(diào)用其父類 load 方法滋恬。
- 類中的 load 方法執(zhí)行順序要優(yōu)先于類別(Category)聊训。
- 當(dāng)有多個(gè)類別(Category)都實(shí)現(xiàn)了 load 方法,這幾個(gè) load 方法都會(huì)執(zhí)行恢氯,但執(zhí)行順序與編譯順序一致带斑,即與類別在 Compile Sources 中出現(xiàn)的順序一致。
- 當(dāng)有多個(gè)不同的類的時(shí)候勋拟,每個(gè)類 load 執(zhí)行順序與編譯順序一致勋磕,即與其在 Compile Sources 出現(xiàn)的順序一致。
initialize
initialize 函數(shù)是在類或者其子類的收到第一條消息之前調(diào)用指黎。這里所指的消息包括實(shí)例方法和類方法的調(diào)用朋凉。也就是說 initialize 方法是以懶加載的方式被調(diào)用的,如果程序一直沒有給某個(gè)類或它的子類發(fā)送消息醋安,那么這個(gè)類的 initialize 方法是永遠(yuǎn)不會(huì)被調(diào)用的杂彭。
- 父類的 initialize 方法會(huì)比子類先執(zhí)行。
- 當(dāng)子類未實(shí)現(xiàn) initialize 方法時(shí)吓揪,在該子類收到第一條消息之前亲怠,會(huì)調(diào)用父類 initialize 方法,子類實(shí)現(xiàn) initialize 方法時(shí)柠辞,則會(huì)覆蓋父類 initialize 方法团秽。有點(diǎn)多態(tài)的意思。
- 當(dāng)有多個(gè) Category 都實(shí)現(xiàn)了 initialize 方法叭首,會(huì)覆蓋類中的方法习勤,只執(zhí)行最后那個(gè)被編譯的,即 Compile Sources 列表中最后一個(gè) Category 的 initialize 方法焙格。
對(duì)于 load 和 initialize 方法图毕,我們不要顯示的調(diào)用 super 的對(duì)應(yīng)方法。