博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
initialize方法与load方法比较
阅读量:6710 次
发布时间:2019-06-25

本文共 1772 字,大约阅读时间需要 5 分钟。

load方法和initialize方法类似点

1. 都只会调用一次    2. 父类在子类之前加载复制代码

不同点在于:

1. 加载时间不同,load方法在main()函数前进行调用,initialize在第一次调用类的所属方法时在调用
<可能永远不调用>
。 2. load方法不会被Category覆盖。复制代码

initialize源码

//向对象发送消息时,lookUpImpOrForward函数判断对象是否初始化,没有初始化则先初始化在调用类的方法IMP lookUpImpOrForward(Class cls, SEL sel, id inst, bool initialize, bool cache, bo ol resolver);//第一次调用类if (initialize && !cls->isInitialized()) {      _class_initialize (_class_getNonMetaClass(cls, inst));  }  // 第一次调用类的方法,初始化对象void _class_initialize(Class cls) {    Class supercls;    bool reallyInitialize = NO;    // 递归初始化父类    supercls = cls->superclass;    if (supercls && !supercls->isInitialized()) {          _class_initialize(supercls);    }    {        monitor_locker_t lock(classInitLock);        if (!cls->isInitialized() && !cls->isInitializing()) {              cls->setInitializing();              reallyInitialize = YES;        }    }    if (reallyInitialize) {         _setThisThreadIsInitializingClass(cls);        if (MultithreadedForkChild) { performForkChildInitialize(cls, supercls);            return;    }        @try {            // 通过objc_msgSend函数调用initialize方法                callInitialize(cls);          }        @catch (...) {             @throw;        }        @finally {            // 执行initialize方法后,进行系统的initialize过程            lockAndFinishInitializing(cls, supercls);        }        return;    }    else if (cls->isInitializing()) {        if (_thisThreadIsInitializingClass(cls)) {            return;        } else if (!MultithreadedForkChild) {            waitForInitializeToComplete(cls);            return;         } else {        _setThisThreadIsInitializingClass(cls);        performForkChildInitialize(cls, supercls);        }    }}复制代码

转载于:https://juejin.im/post/5c74f6c2f265da2d993d9237

你可能感兴趣的文章
使用AFNetworking框架遇到的一个经典bug的解决方案
查看>>
【莫队算法】【权值分块】bzoj3236 [Ahoi2013]作业
查看>>
Levmar:Levenberg-Marquardt非线性最小二乘算法
查看>>
集训队日常训练20181110 DIV2 题解及AC代码
查看>>
DOCTYPE 与浏览器渲染模式分析
查看>>
lf 前后端分离 (3) 中间建跨域
查看>>
Python Day1
查看>>
警惕互联网与经济的双重泡沫
查看>>
Caddy服务器搭建和实现文件共享
查看>>
授予组件和控件许可权限
查看>>
fortitoken
查看>>
python中的字符串操作
查看>>
四则运算(挑战出题)解答之轮子哥版-2
查看>>
监听器 HttpSessionBindingListener
查看>>
Django学习笔记-2018.11.17
查看>>
列表转字典
查看>>
python Day 1 - 搭建开发环境
查看>>
原来还有这样一个东西,重来不知道过-linux ,ulimit
查看>>
IO多路复用之select总结
查看>>
机器学习基础-Logistic回归1
查看>>