重点:
Objective-C 有两个神奇的方法:+load 和 +initialize,这两个方法在类被使用时会自动调用。但是两个方法的不同点会导致应用层面上性能的显著差异。
+ initialize 和+load 方法调用时机
:这两个方法会在第一次初始化这个类之前被调用,我们用它来初始化静态变量。
特别说明:iOS在应用启动的时候,就会加载所有的类,也就会调用每个类的+load方法,而且会在 main() 函数之前被调用。 + initialize方法类似一个懒加载如果没有使用这个类,系统是不会去调用这个方法的,而且默认只会加载一次,而且他的调用发生在+init 方法之前。
重点:+ initialize的使用方法:
+ (void)initialize{
[super initialize];
}
用途:
我们在项目中有一些初始化工作都写在AppDelegate.m下的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中去执行,这种方法会使得该方法乃至AppDelegate出现大量代码过长,阅读性差的效果,这么做其实只是为了在程序启动时获得一次调用机会。我们可以采取下面的方法来减轻 AppDelegate.m 的压力:
+ (void)load{
__block id observer = [[NSNotificationCenter defaultCenter]addObserverForName:UIApplicationDidFinishLaunchingNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
//要初始化的东西
NSLog(@"%@",@"123");
//完成初始化后销毁通知的监听
[[NSNotificationCenter defaultCenter]removeObserver:observer];
}];
}
这样就可以使- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法瘦身。