美文网首页iOS开发-面试
load和initialize方法区别底层原理

load和initialize方法区别底层原理

作者: 目前运行时 | 来源:发表于2018-07-09 16:15 被阅读16次
  • 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是优先调用分类。

相关文章

网友评论

    本文标题:load和initialize方法区别底层原理

    本文链接:https://www.haomeiwen.com/subject/ckxtpftx.html