load与initialize是Nsobject类实现初始化操作的两个方法
load
load方法是对于加入运行时期系统中每个类以及分类需要调用的方法,而且只会调用一次
-
调用时机:程序启动的时候,包含类或分类程序载入系统时
-
特点:执行该方法的时候,运行期系统处于”脆弱状态”,在执行子类load方法之前,必定会先执行所有超类的方法,而这时如果代码还依赖了其它程序库,那么程序库里相关类的load方法也必定会先执行,但根据给定的程序库无法判断其中各个类的载入顺序,所以在load方法中使用其它类并不安全,而且load方法并不参与覆写机制
需要注意的是因为整个应用在执行load方法时都会阻塞,应尽量减少所执行的操作
-
应用:类的某些初始化操作(如:Method Swizzling需要写在load方法中)
initialize
该方法会在程序首次用该类之前调用,且只调一次,所以它也属于viewcontroller
生命周期的一部分,是类初始化前就调用的方法
-
调用时机:程序首次用该类之前,运行期系统自动调用
-
特点:运行期系统在执行该方法时处于正常的状态,也就是所有的类或分类已经载入完毕。因此,在此方法中可以可以安全使用并调用任意类的方法,initialize方法参与覆写机制
-
应用:无法编译在编译期设定全局常量,可以放在intialize方法里初始化