你需要了解的load和initialize

2021-09-12 01:12:54 字數 1443 閱讀 9151

nsobject類有兩種初始化方式loadinitialize

+ (void)load;

複製**

對於加入執行期系統的類及分類,必定會呼叫此方法,且僅呼叫一次。

ios會在應用程式啟動的時候呼叫load方法,在main函式之前呼叫

執行子類的load方法前,會先執行所有超類的load方法,順序為父類->子類->分類

在load方法中使用其他類是不安全的,因為會呼叫其他類的load方法,而如果關係複雜的話,就無法判斷出各個類的載入順序,類只有初始化完成後,類例項才能進行正常使用

load 方法不遵從繼承規則,如果類本身沒有實現load方法,那麼系統就不會呼叫,不管父類有沒有實現(跟下文的initialize有明顯區別)

盡可能的精簡load方法,因為整個應用程式在執行load方法時會阻塞,即,程式會阻塞直到所有類的load方法執行完畢,才會繼續

load 方法中最常用的就是方法交換method swizzling

+ (void)initialize;

複製**

在首次使用該類之前由執行期系統(非人為)呼叫,且僅呼叫一次

惰性呼叫,只有當程式使用相關類時,才會呼叫

如果類未實現initialize方法,而其超類實現了,那麼會執行超類的實現**,而且會執行兩次(load 第5點)

initialize方法也需要盡量精簡,一般只應該用來設定內部資料,比如,某個全域性狀態無法在編譯期初始化,可以放在initialize裡面。

static nsmutablearray *ksomeobjects;

@implementation people

+ (void)initialize

}複製**

對於分類中的initialize方法,會覆蓋該類的initialize方法。

1. 在載入階段,如果類實現了load方法,系統就會呼叫它,load方法不參與覆寫機制

2. 在首次使用某個類之前,系統會向其傳送initialize訊息,通常應該在裡面判斷當前要初始化的類,防止子類未覆寫initialize的情況下呼叫兩次

3. load與initialize方法都應該實現得精簡一些,有助於保持應用程式的響應能力,也能減少引入「依賴環」(interdependency cycle)的機率

4. 無法在編譯期設定的全域性常量,可以放在initialize方法裡初始化

你需要了解的load和initialize

nsobject類有兩種初始化方式load和initialize void load 複製 對於加入執行期系統的類及分類,必定會呼叫此方法,且僅呼叫一次。ios會在應用程式啟動的時候呼叫load方法,在main函式之前呼叫 執行子類的load方法前,會先執行所有超類的load方法,順序為父類 子類 ...

你需要了解的load和initialize

nsobject類有兩種初始化方式load和initialize void load 複製 對於加入執行期系統的類及分類,必定會呼叫此方法,且僅呼叫一次。ios會在應用程式啟動的時候呼叫load方法,在main函式之前呼叫 執行子類的load方法前,會先執行所有超類的load方法,順序為父類 子類 ...

Fiddler 你需要了解的

官網 平台 支援所有作業系統和瀏覽器,對window支援比較好 主要功能 工作原理 系統 不過如果fiddler非正常退出,這時候因為fiddler沒有自動登出,會造成網 頁無法訪問。解決的辦法是重新啟動下fiddler.同類的其它工具有 httpwatch,firebug,wireshark 啟動...