- load方法的调用时机?
。在类或者分类开始加进去内存的时候就会调用,其中分类的方法并不会覆盖类中的方法,而且load方法只会程序运行的时候只会调用一次。 -
load方法的调用顺序?
。如果类的方法和分类的方法都有load方法,那么先调用类的方法,如果这个类本身有继承关系,那么先调用父类的方法,在调用子类的方法。
。分类的load方法调用顺序是按照编译进程序的顺序先后执行的,先编译进去的先调用,后编译进去的后调用,如图:
image.png - initalize方法的什么时候调用“
。当这个类第一次开始接受到消息的时候就开始调用,比如 DGPerson *person = [DGPerson alloc] init]相当于 objc_megSend("person",@selector(@"alloc")),所以就是调用initalize 方法。 -
initalize方法的调用顺序
。如果有继承的关系,先调用父类的initalize方法,然后在调用子类的initalize方法,如果有分类的initalize方法 先调用分类的initalize方法,分类的initalize的方法调用顺序是越参与编译的越后的越先调用,如:
image.png
一个类的initalize方法有可能调用两次,原因是这个类的子类,但是子类中没有实现initalize方法,那么调用本类和子类时候都调用本类的initalize方法。
- initalize 和load方法的区别?
。initalize是通过消息发送机制开始调用的,而load是类、分类等等开始加进内存中就开始调用。
。load方法在程序运行期间只调用一次,而initalize是类开始收到消息的时候调用一次,因为存在继承的关系 可能会被调用多次。
。load方法的优先原则是先调用父类、而initalize是优先调用分类。
网友评论