load 和 initialize 方法的區別;

相同點:都是可以自動被調用的,無需手動調用;並且它們的方法實現內部都是有鎖的,是線程安全的

不同點:
(1)子類不實現load方法,父類的load方法就不會被調用,子類不實現init方法,父類也會調用init方法;
(2)load在main函數之前被調用,不是懶加載實現的;init是懶加載,只被執行一次
(3)load是隻要類所在文件被引用就會被調用,而initialize是在類或者其子類的第一個方法被調用前調用。所以如果類沒有被引用進項目,就不會有load調用;但即使類文件被引用進來,但是沒有使用,那麼initialize也不會被調用。
load詳解:
在調用load方法之前
(1)會調用load_images用來掃描鏡像中所有帶+load符號的方法,將這些類加入到loadable_classes列表中,父類在前,子類在後,分類在loadable_category中
(2)先從loadable_classes中調用call_class_loads;然後loadable_category中call_category_loads
(3)使用場景:交換方法

initialize詳解
在該類第一次調用方法時被調用,在alloc之前,alloc導致了initialize的執行,真正調用initialize方法的是c函數_class_initialize,強制父類先發送

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章