OC类的+load和+initialize方法

2019-03-16  本文已影响0人  Sweet丶

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

一、认识这两个方法

// 只在类或分类加载进内存的时候会调用一次
+ (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的启动过程

上一篇下一篇

猜你喜欢

热点阅读