+(void)load +(void)initialize
Apple的文档很清楚地说明了initialize和load的区别在于:load是只要类所在文件被引用就会被调用,而initialize是在类或者其子类的第一个方法被调用前调用。所以如果类没有被引用进项目,就不会有load调用;但即使类文件被引用进来,但是没有使用,那么initialize也不会被调用。
它们的相同点在于:方法只会被调用一次。(其实这是相对runtime来说的,后边会做进一步解释)。
文档也明确阐述了方法调用的顺序:父类(Superclass)的方法优先于子类(Subclass)的方法,类中的方法优先于类别(Category)中的方法。
执行时机
在程序运行后立即执行
在类的方法第一次被调时执行
若自身未定义,是否沿用父类的方法? 否 是
类别中的定义 全都执行,但后于类中的方法
覆盖类中的方法,只执行一个