学习这两个方法并非只是面试有用,在实际开发中或许能在想解决方案的时候能帮到你!
一、认识这两个方法
// 只在类或分类加载进内存的时候会调用一次
+ (void)load;
// 只在类第一次被调用方法时系统先调用一次
+ (void)initialize;
二、两个方法的作用
- 运用
load方法
只调用一次的特性,交换类中某个方法的实现代码可以写在这个方法里面。 - 运用
initialize方法
的特性,可以做一些初始化的设置, 这样就能在做到在真正使用的时候才去设置,如
[[UINavigationBar appearance] setBarTintColor:[UIColor colorNamed:@"#645646"]];
三、方法的调用顺序
经过了代码的实践总结出来的,这里实践的过程省略。
+load
方法
- 在类/分类加载进内存的时候系统会先调用一次。
- 按照文件的编译顺序先调用项目中所有类的
+load
方法;在调用之前如果发现父类还没有被调用则会令父类先完成调用。- 当项目中所有类的load都调用完之后,再开始调用项目中所有分类+的load。
- 分类中的调用就是按照分类的编译顺序来逐个调用,与父类子类继承关系无关。
+ initialize
方法
- 会在类第一次被调用方法之前系统调用一次,且如果分类中有
+ initialize
,则调用的是分类中的+ initialize
。- 在调用之前,如果发现有父类未调用
+ initialize
,则先会令父类去完成调用一次,然后自己调用一次。- 调用父类的
+ initialize
时也是会优先调用分类中的+ initialize
- 有多个分类时是调用的最后编译的那个分类的
+ initialize
。
以上完结
参考阅读:iOS程序启动过程
深入理解iOS App的启动过程