在分析前,我先说明创建的几个类的继承关系
我先说几个结论:下面会附代码
首先你得清楚的是:这两个类方法都是NSObject中,所以几乎所有的类都拥有这两个方法。
我先说一说一般情况:
对于load:只要在类中实现了该方法,这个方法会在程序一启动就被立即执行,比AppDelegate还要先被执行。但有个前提:你实现了该方法。跟运行时息息相关。
对于initialize:当类中的第一个方法被调用时该方法会被调用。
这两个方法在调用前都会先调用父类的该方法。
1、load~啊: 如果你不实现load这个方法,就不会调用,如ChildClass类没实现load方法,所以也没被调用。实现load方法的类中,执行顺序都是父类的load先被执行~文章最后我打印了运行结果可以照着看咯~
2、initialize ~啊:对于+(void)initialize这个方法,当本类或者父类调用自己的第一个方法时,就会被调用,没有调用该类中的任何方法就不会被执行;如果子类的该方法被调用则会触发子类的该方法,但在触发该方法前会先调用父类的该方法,若该父类依然存在父类(在这里父类都指的是自定义的),则先会调用它的父类中的该方法
如:ViewController中调用Grandson,在执行alloc时,先会调用SuperClass,再调用ChildClass,最后调用Grandson中的+(void)initialize方法
3、再唠叨一句:文档明确阐述了方法调用的顺序:父类(Superclass)的方法优先于子类(Subclass)的方法,类中的方法优先于类别(Category)中的方法。 所以我们不需要在子类的这两个方法中再添加[super load] and [super initialize]。