- 由于 Load 和 Object 都屬于類加載的機(jī)制馋艺,都屬于 NSObject 里面的函數(shù)扣泊, 所以離開NSObject 離開運(yùn)行時(shí)也就無所謂這兩個(gè)函數(shù)了置尔。
- Load 發(fā)生在應(yīng)用冷啟動加載的時(shí)候赁严,不參與系統(tǒng)的override機(jī)制胜嗓,先加載類的Load , 再加載 category 的 Load , 無關(guān)繼承鏈邑跪。
- initialize 發(fā)生在第一次調(diào)用該類的時(shí)候次坡,但是它關(guān)聯(lián)繼承鏈呼猪, 所以如果子類和父類都實(shí)現(xiàn)了 initialize 方法,會先調(diào)用父類的initialize 砸琅,然后調(diào)用子類的宋距。
@implementation LoadingObject
//無法再編譯器確定的全局變量,可以設(shè)置到initialize里面初始化
static NSMutableArray* array;
+ (void)initialize {
if (self == [LoadingObject class]) {
NSLog(@"initialize LoadingObject");
array = @[].mutableCopy;
}
}
+ (void)load {
//error1: 為什么先打印了initialize明棍, 因?yàn)檎{(diào)用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 發(fā)生在 main() 函數(shù)之前之前乡革,點(diǎn)擊圖標(biāo)系統(tǒng) exec() 之后。
- 由于執(zhí)行 main() 之前還是一個(gè)單線程操作摊腋,所以不建議在 load 里面執(zhí)行過多操作沸版,要優(yōu)化啟動,確實(shí)需要放到 initialize 里面兴蒸。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者