- 每個類都有一個initialize的類方法,在類的其他方法被觸發前,都會先調用這個類方法;
- 因為每個類只會調用一次initialize,所以這里可以做一些類的版本設置之類的事情
- runtime會給繼承鏈上的每個類都發送這個initialize消息,即使某個類并沒有實現這個類方法,這就可能會出現某個類的initialize被多次調用的情況(子類沒有實現該類方法,從而調用了父類的initialize類方法)
- 不要顯示調用initialize類方法,真的需要觸發初始化,可以通過
[MyClass self];
這樣的方式來進行
- 可以通過dispatch_once的方法來實現代碼只運行一次,也可以通過判別self來確定當前的代碼執行上下文,兩種方式如下:
// 類似單例的初始化
+ (void)initialize {
static dispatch_once_t onceToken = 0;
dispatch_once(&onceToken, ^ {
// execute only once
});
}
// 識別當前上下文
+ (void)initialize {
if (self == [MyClass class]) {
// initialize code here
}
}
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。