iOS------+load 和 +initialize

重点:

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方法瘦身。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Objective-C 有两个神奇的方法:+load 和 +initialize,这两个方法在类被使用时会自动调用...
    doudo阅读 217评论 0 0
  • 共同点: 在不考虑开发者主动使用的情况下,系统最多会调用一次如果父类和子类都被调用,父类的调用一定在子类之前都是为...
    粽子123阅读 857评论 0 1
  • Apple的文档很清楚地说明了initialize和load的区别在于:load是只要类所在文件被引用就会被调用,...
    linbj阅读 173评论 0 1
  • 一个类的load方法,当类加载到OC运行时环境(内存)中,就会调用一次(一个类只会加载1次) 一个类的initia...
    一亩三分甜阅读 387评论 0 1
  • 你还记得她吗? 早忘了,哈哈。 我还没说她是谁。
    dorjee阅读 337评论 0 1