美文网首页
+initialize()方法

+initialize()方法

作者: 东方诗空 | 来源:发表于2022-03-23 12:32 被阅读0次

    +initialize方法

    +initialize方法会在类第一次接收到消息时调用

    • 调用顺序
      1、先调用父类的+initialize,再调用子类的+initialize
      2、先初始化父类,再初始化子类,每个类只会初始化1次

    objc4源码解读过程

    objc-msg-arm64.s
    objc_msgSend

    objc-runtime-new.mm
    class_getInstanceMethod
    lookUpImpOrNil
    lookUpImpOrForward
    _class_initialize
    callInitialize
    objc_msgSend(cls, SEL_initialize)

    +initialize和+load的很大区别是,+initialize是通过objc_msgSend进行调用的,所以有以下特点
    如果子类没有实现+initialize,会调用父类的+initialize(所以父类的+initialize可能会被调用多次)
    如果分类实现了+initialize,就覆盖类本身的+initialize调用

    相关文章

      网友评论

          本文标题:+initialize()方法

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