1. 程式人生 > >Objective-C類方法 load 和 initialize

Objective-C類方法 load 和 initialize

object mage cnblogs 什麽 類方法 color ech 引用 https

1、區別:+load 是只要類所在文件被引用就會被調用而 +initialize 是在類或者其子類的第一個方法被調用前調用。所以如果類沒有被引用進項目,就不會有 +load 調用;但即使類文件被引用進來,如果沒有使用,那麽 +initialize 也不會被調用。

2、相同點:方法只會被調用一次。

3、+load 方法探討

技術分享

技術分享

技術分享

結論 :+load 的執行順序是先父類 再到子類,後 category,而 category 的 +load 執行順序是根據編譯順序決定的。

4、+initialize 方法探討

①. 類和 category 都實現 +initialize 方法,這時候只會執行最後編譯的 category 中的 +initialize 方法

技術分享

技術分享

②. 分類 和 子類都實現 +initialize 方法 (屏蔽category的 +initialize ),會優先調用父類方法,跟編譯先後順序無關

技術分享

技術分享

總結:1、當 類 和 category 都實現 +initialize 方法,category 的 +initialize 方法 和覆蓋 類的 +initialize方法。

2、只要類中的 A 方法被調用 在此之前 會先調用 父類 +initialize,再調用子類 +initialize,最後調用這個 A 方法。

note:這只是初步探討,以後有什麽發現會繼續添加。

參考:https://tech.meituan.com/DiveIntoCategory.html

Objective-C類方法 load 和 initialize