- 由于 Load 和 Object 都屬于類加載的機制,都屬于 NSObject 里面的函數, 所以離開NSObject 離開運行時也就無所謂這兩個函數了。
- Load 發生在應用冷啟動加載的時候,不參與系統的override機制,先加載類的Load , 再加載 category 的 Load , 無關繼承鏈。
- initialize 發生在第一次調用該類的時候,但是它關聯繼承鏈, 所以如果子類和父類都實現了 initialize 方法,會先調用父類的initialize ,然后調用子類的。
@implementation LoadingObject
//無法再編譯器確定的全局變量,可以設置到initialize里面初始化
static NSMutableArray* array;
+ (void)initialize {
if (self == [LoadingObject class]) {
NSLog(@"initialize LoadingObject");
array = @[].mutableCopy;
}
}
+ (void)load {
//error1: 為什么先打印了initialize, 因為調用self description 的方法
NSLog(@"load LoadingObject");
}
@end
@interface LoadingChildObject : LoadingObject
@end
@implementation LoadingChildObject
+ (void)initialize {
NSLog(@"initialize LoadingChildObject");
}
+ (void)load {
NSLog(@"load LoadingChildObject");
}
@end
Extension:
- Load 發生在 main() 函數之前之前,點擊圖標系統 exec() 之后。
- 由于執行 main() 之前還是一個單線程操作,所以不建議在 load 里面執行過多操作,要優化啟動,確實需要放到 initialize 里面。
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。