+ (void)load;
1.对于加入运行期系统的类及分类,必定会调用此方法,且仅调用一次。
2.iOS在应用程序启动时候调用load方法,在main函数之前。
3.执行顺序为:父类 ---> 子类 ---> 分类
4.在load方法中使用其他类是不安全的,因为会调用其他类的load方法,而如果关系复杂的话,就无法判断出各个类的载入顺序,类只有初始化完成后,类实例才能进行正常使用。
5.load 方法不遵从继承规则,如果类本身没有实现load方法,那么系统就不会调用,不管父类有没有实现(跟下文的initialize有明显区别)。
6.尽可能的精简load方法,因为整个应用程序在执行load方法时会阻塞,即,程序会阻塞直到所有类的load方法执行完毕,才会继续。
7.load 方法中最常用的就是方法交换method swizzling。
+ (void)initialize;
1.在首次使用该类之前由运行期系统(非人为)调用,且仅调用一次。
2.惰性调用,只有当程序使用相关类时,才会调用。
3.运行期系统会确保initialize方法是在线程安全的环境中执行,即,只有执行initialize的那个线程可以操作类或类实例。其他线程都要先阻塞,等待initialize执行完。
3.如果类未实现initialize方法,而其超类实现了,那么会运行超类的实现代码,而且会运行两次
4. 类别会覆盖类中的方法,只执行一个