1.先調(diào)用類的 load 方法,先編譯哪個類就先調(diào)用該類的 load.
2.在調(diào)用 load 之前調(diào)用父類 load 方法.
3.分類 load 方法不會覆蓋本類的 load 方法.
4.initialize 方法先初始化父類,之后再初始化子類.
5.如果子類未實現(xiàn) initialize 方法,就會調(diào)用父類的 initialize 方法.
6.如果分類實現(xiàn)了 initialize 方法,會覆蓋本類 initialize 方法.
load 函數(shù)是當(dāng)類或分類(Category)被加載到 Objective-C runtime 時(就是被引用的時候)被調(diào)用的,實現(xiàn)這個方法可以讓我們在類加載的時候執(zhí)行一些類相關(guān)的行為盈罐。當(dāng)類被引用進(jìn)項目的時候就會執(zhí)行 load 函數(shù)(在 main 函數(shù)開始執(zhí)行之前),與這個類是否被用到無關(guān),每個類的 load 函數(shù)只會自動調(diào)用一次壤躲。load 函數(shù)調(diào)用特點如下:
1美莫、當(dāng)父類和子類都實現(xiàn) load 函數(shù)時途凫,二者的 load 方法都會被調(diào)用,父類的 load 方法執(zhí)行順序要優(yōu)先于子類宗挥。
2、當(dāng)子類未實現(xiàn) load 方法時种蝶,在加載該子類時契耿,不會去調(diào)用其父類 load 方法。
3螃征、類中的 load 方法執(zhí)行順序要優(yōu)先于類別(Category)宵喂。
4、當(dāng)有多個類別(Category)都實現(xiàn)了 load 方法会傲,這幾個 load 方法都會執(zhí)行锅棕,但執(zhí)行順序與編譯順序一致,即與類別在 Compile Sources 中出現(xiàn)的順序一致淌山。
5裸燎、當(dāng)有多個不同的類的時候,每個類 load 執(zhí)行順序與編譯順序一致泼疑,即與其在 Compile Sources 出現(xiàn)的順序一致德绿。
initialize 函數(shù)是在類或者其子類的收到第一條消息之前調(diào)用。這里所指的消息包括實例方法和類方法的調(diào)用退渗。也就是說 initialize 方法是以懶加載的方式被調(diào)用的移稳,如果程序一直沒有給某個類或它的子類發(fā)送消息,那么這個類的 initialize 方法是永遠(yuǎn)不會被調(diào)用的会油。
1个粱、父類的 initialize 方法會比子類先執(zhí)行。
2翻翩、當(dāng)子類未實現(xiàn) initialize 方法時都许,在該子類收到第一條消息之前,會調(diào)用父類 initialize 方法嫂冻,子類實現(xiàn) initialize 方法時胶征,則會覆蓋父類 initialize 方法。有點多態(tài)的意思桨仿。
3睛低、當(dāng)有多個 Category 都實現(xiàn)了 initialize 方法,會覆蓋類中的方法,只執(zhí)行最后那個被編譯的钱雷,即 Compile Sources 列表中最后一個 Category 的 initialize 方法骂铁。
對于 load 和 initialize 方法,我們不要顯示的調(diào)用 super 的對應(yīng)方法急波。