nsobject類有兩種初始化方式load
和initialize
+ (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 啟動...