OC类的+load和+initialize方法

学习这两个方法并非只是面试有用,在实际开发中或许能在想解决方案的时候能帮到你!

一、认识这两个方法

// 只在类或分类加载进内存的时候会调用一次
+ (void)load;
// 只在类第一次被调用方法时系统先调用一次
+ (void)initialize;

二、两个方法的作用

  1. 运用load方法只调用一次的特性,交换类中某个方法的实现代码可以写在这个方法里面。
  2. 运用initialize方法的特性,可以做一些初始化的设置, 这样就能在做到在真正使用的时候才去设置,如
  [[UINavigationBar appearance] setBarTintColor:[UIColor colorNamed:@"#645646"]];

三、方法的调用顺序

经过了代码的实践总结出来的,这里实践的过程省略。


在这里查看编译顺序.png
+load方法
  1. 在类/分类加载进内存的时候系统会先调用一次。
  2. 按照文件的编译顺序先调用项目中所有类的+load方法;在调用之前如果发现父类还没有被调用则会令父类先完成调用。
  3. 当项目中所有类的load都调用完之后,再开始调用项目中所有分类+的load。
  4. 分类中的调用就是按照分类的编译顺序来逐个调用,与父类子类继承关系无关。
+ initialize方法
  1. 会在类第一次被调用方法之前系统调用一次,且如果分类中有+ initialize,则调用的是分类中的+ initialize
  2. 在调用之前,如果发现有父类未调用+ initialize,则先会令父类去完成调用一次,然后自己调用一次。
  3. 调用父类的+ initialize时也是会优先调用分类中的+ initialize
  4. 有多个分类时是调用的最后编译的那个分类的+ initialize

以上完结

参考阅读:iOS程序启动过程
深入理解iOS App的启动过程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容