1.先調用類的 load 方法,先編譯哪個類就先調用該類的 load.
2.在調用 load 之前調用父類 load 方法.
3.分類 load 方法不會覆蓋本類的 load 方法.
4.initialize 方法先初始化父類,之后再初始化子類.
5.如果子類未實現(xiàn) initialize 方法,就會調用父類的 initialize 方法.
6.如果分類實現(xiàn)了 initialize 方法,會覆蓋本類 initialize 方法.
load 函數(shù)是當類或分類(Category)被加載到 Objective-C runtime 時(就是被引用的時候)被調用的,實現(xiàn)這個方法可以讓我們在類加載的時候執(zhí)行一些類相關的行為。當類被引用進項目的時候就會執(zhí)行 load 函數(shù)(在 main 函數(shù)開始執(zhí)行之前),與這個類是否被用到無關,每個類的 load 函數(shù)只會自動調用一次。load 函數(shù)調用特點如下:
1、當父類和子類都實現(xiàn) load 函數(shù)時,二者的 load 方法都會被調用,父類的 load 方法執(zhí)行順序要優(yōu)先于子類。
2、當子類未實現(xiàn) load 方法時,在加載該子類時,不會去調用其父類 load 方法。
3、類中的 load 方法執(zhí)行順序要優(yōu)先于類別(Category)。
4、當有多個類別(Category)都實現(xiàn)了 load 方法,這幾個 load 方法都會執(zhí)行,但執(zhí)行順序與編譯順序一致,即與類別在 Compile Sources 中出現(xiàn)的順序一致。
5、當有多個不同的類的時候,每個類 load 執(zhí)行順序與編譯順序一致,即與其在 Compile Sources 出現(xiàn)的順序一致。
initialize 函數(shù)是在類或者其子類的收到第一條消息之前調用。這里所指的消息包括實例方法和類方法的調用。也就是說 initialize 方法是以懶加載的方式被調用的,如果程序一直沒有給某個類或它的子類發(fā)送消息,那么這個類的 initialize 方法是永遠不會被調用的。
1、父類的 initialize 方法會比子類先執(zhí)行。
2、當子類未實現(xiàn) initialize 方法時,在該子類收到第一條消息之前,會調用父類 initialize 方法,子類實現(xiàn) initialize 方法時,則會覆蓋父類 initialize 方法。有點多態(tài)的意思。
3、當有多個 Category 都實現(xiàn)了 initialize 方法,會覆蓋類中的方法,只執(zhí)行最后那個被編譯的,即 Compile Sources 列表中最后一個 Category 的 initialize 方法。
對于 load 和 initialize 方法,我們不要顯示的調用 super 的對應方法。