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