load与initialize

loadinitializeNsobject类实现初始化操作的两个方法

load

load方法是对于加入运行时期系统中每个类以及分类需要调用的方法,而且只会调用一次

  • 调用时机:程序启动的时候,包含类或分类程序载入系统时

  • 特点:执行该方法的时候,运行期系统处于”脆弱状态”,在执行子类load方法之前,必定会先执行所有超类的方法,而这时如果代码还依赖了其它程序库,那么程序库里相关类的load方法也必定会先执行,但根据给定的程序库无法判断其中各个类的载入顺序,所以在load方法中使用其它类并不安全,而且load方法并不参与覆写机制

    需要注意的是因为整个应用在执行load方法时都会阻塞,应尽量减少所执行的操作

  • 应用:类的某些初始化操作(如:Method Swizzling需要写在load方法中)

initialize

该方法会在程序首次用该类之前调用,且只调一次,所以它也属于viewcontroller生命周期的一部分,是类初始化前就调用的方法

  • 调用时机:程序首次用该类之前,运行期系统自动调用

  • 特点:运行期系统在执行该方法时处于正常的状态,也就是所有的类或分类已经载入完毕。因此,在此方法中可以可以安全使用并调用任意类的方法,initialize方法参与覆写机制

  • 应用:无法编译在编译期设定全局常量,可以放在intialize方法里初始化