天天看點

iOS 面試題~類方法load和initialize的差別

//聯系人:石虎 QQ:1224614774 昵稱:嗡嘛呢叭咪哄

一、+load:

1/方法當類或分類添加到object-c runtime時被調用

2/子類的+load方法會在它所有父類的+load方法之後執行,

3/而分類的+load方法會在它的主類的+load方法之後執行,

4.+load方法,它不遵循那套繼承規則。

5.+load方法調用順序是:SuperClass -->SubClass --> CategaryClass。

6.load,是加載類的時候,這裡是Constants類,就會調用。也就是說,ios應用啟動的時候,就會加載所有的類,就會調用這個方法。

注意:這樣有個缺點,當加載類需要很昂貴的資源,或者比較耗時的時候,可能造成不良的使用者體驗,或者系統的抖動(dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{});用GCD可能會好點)。

二、initialize

1/是在類或者它的子類接受第一條消息前被調用;

2/是以懶加載的方式被調用的;

3/一定會在“線程安全的環境”中執行;

4/調用順序是SuperClass -->SubClass

5/initialize 會在運作時僅被觸發一次,如果沒有向類發送消息的話,這個方法将不會被調用。這個方法的調用是線程安全的。父類會比子類先收到此消息。

謝謝!!!