美文网首页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