ios load方法調用順序

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 的對應方法。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容