重點:
Objective-C 有兩個神奇的方法:+load 和 +initialize霎终,這兩個方法在類被使用時會自動調(diào)用泄伪。但是兩個方法的不同點會導(dǎo)致應(yīng)用層面上性能的顯著差異国旷。
+ initialize 和+load 方法調(diào)用時機(jī)
:這兩個方法會在第一次初始化這個類之前被調(diào)用及汉,我們用它來初始化靜態(tài)變量钢悲。
特別說明:iOS在應(yīng)用啟動的時候陶缺,就會加載所有的類钾挟,也就會調(diào)用每個類的+load方法,而且會在 main() 函數(shù)之前被調(diào)用饱岸。 + initialize方法類似一個懶加載如果沒有使用這個類掺出,系統(tǒng)是不會去調(diào)用這個方法的徽千,而且默認(rèn)只會加載一次,而且他的調(diào)用發(fā)生在+init 方法之前汤锨。
重點:+ initialize的使用方法:
+ (void)initialize{
[super initialize];
}
用途:
我們在項目中有一些初始化工作都寫在AppDelegate.m下的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中去執(zhí)行罐栈,這種方法會使得該方法乃至AppDelegate出現(xiàn)大量代碼過長,閱讀性差的效果泥畅,這么做其實只是為了在程序啟動時獲得一次調(diào)用機(jī)會荠诬。我們可以采取下面的方法來減輕 AppDelegate.m 的壓力:
+ (void)load{
__block id observer = [[NSNotificationCenter defaultCenter]addObserverForName:UIApplicationDidFinishLaunchingNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
//要初始化的東西
NSLog(@"%@",@"123");
//完成初始化后銷毀通知的監(jiān)聽
[[NSNotificationCenter defaultCenter]removeObserver:observer];
}];
}
這樣就可以使- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法瘦身。