美文网首页
OC中的initialize

OC中的initialize

作者: it小小菜鸟 | 来源:发表于2020-07-16 09:22 被阅读0次
  1. +initialize方法会在类第一次接收到消息时调用
  2. +initialize是通过消息机制来调用的,所以分类中initialize会调用,而类的initialize就不会调用了
  3. +initialize会先调用父类的+initialize,再调用子类的+initialize方法。(分析源码得到)
  4. 如果子类没有实现+initialize,就会调用父类的+initialize(所以父类的+initialize可能会被调用多次)

通过消息机制,发送消息时。会去查找方法列表,在查找方法列表的过程中会调用class_getInstanceMethod方法,该方法中会调用lookUpImpOrNil方法,在该方法中,会调用initializeAndLeaveLocked,该方法中又调用initializeAndMaybeRelock,该方法中调用initializeNonMetaClass,该方法中会递归调用,并传入父类,然后调用callInitialize(cls),在callInitialize()中会调用objc_msgSend(cls, @selector(initialize)方法给对象发送消息

void initializeNonMetaClass(Class cls)
{
    ASSERT(!cls->isMetaClass());

    Class supercls;
    bool reallyInitialize = NO;

    // Make sure super is done initializing BEFORE beginning to initialize cls.
    // See note about deadlock above.
    // 如果父类没有初始化,就会先调用父类的初始化方法
    supercls = cls->superclass;
    if (supercls  &&  !supercls->isInitialized()) {
        initializeNonMetaClass(supercls);
    }
...
 callInitialize(cls);
void callInitialize(Class cls)
{
    ((void(*)(Class, SEL))objc_msgSend)(cls, @selector(initialize));
    asm("");
}

相关文章

  • OC中的Category(三)

    OC中的Category(三) OC中+initialize函数加载和调用 OC对象是在查找方法时判断自己有没有初...

  • OC中的initialize

    +initialize方法会在类第一次接收到消息时调用 +initialize是通过消息机制来调用的,所以分类中i...

  • OC中的load和initialize的区别

    OC中的load和initialize的区别 调用方式load是根据函数地址直接调用initialize是通过ob...

  • 技术点

    1、oc中 load 和initialize 方法的异同? 连接 load 方法: 对于每个类(class)及分类...

  • OC中的initialize和load

    Apple的文档很清楚地说明了initialize和load的区别在于:load是只要类所在文件被引用就会被调用,...

  • OC中的initialize和load

    Apple的文档很清楚地说明了initialize和load的区别在于:load是只要类所在文件被引用就会被调用,...

  • OC中的load跟initialize

    load:当类和分类装载跟链接的时候,只要是实现了load方法就会调用,子类的调用会在父类调用之后,分类调用会在类...

  • UITabbar修改字体颜色

    在继承 UITabBarController 的子类中加入以下代码 oc: + (void)initialize ...

  • OC中load和initialize方法

    前言 最近在因为工作的原因,空余时间相对多了一点。所以准备好好整理一下OC相关的基础知识,以便加固相关的知识点。 ...

  • OC 中的 load 与 initialize 方法

    这里所要介绍的 load 与 initialize 方法,这两个是类方法,是系统的方法。我曾经见过有大神在自己的c...

网友评论

      本文标题:OC中的initialize

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