initialize被调用次数探究

作者&投稿:类矩 (若有异议请与网页底部的电邮联系)
~

我们都知道 +initialize 方法会在此类第一次被使用的时候会被调用,那么调用的次数是靠什么来决定的了?
结论一:类第一次被使用的时候,会先调用 +initialize 方法

源码地址: https://github.com/RetVal/objc-runtime.git

先不考虑加锁和多线程问题, _class_initialize 主要的就是如下两个步骤:

第二步会调用:

看到 objc_msgSend 表明:
结论二:会走OC的消息发送流程

根据以上的推论我们可以得知:
+initialize 会被调用0次,一次,多次

或者可以这么理解,任何类在使用之前都会调用它的 +initialize ,如果这个类没有 +initialize ,那么就找它的父类的 +initialize 一直到 NSObject 类。并且不会自动调用 [super initialize] 。

为了验证上述的结果,做了如下的测试

类: RXInitializeParentObject 所有DemoObject的父类

测试类: RXInitializeTestObject

当然是什么也没有输出

RXInitializeEmptyObject ,子类没有自己的initialize

测试类: RXInitializeTestObject

输出的结果:

第一行输出:是因为初始化 RXInitializeEmptyObject 会先初始化其父类 RXInitializeParentObject
第二行输出:对于 RXInitializeEmptyObject 来说,根据OC的消息发送规则,它的 initialize 方法定位到了父类的 initialize 方法了

类 RXInitializeCustomObject

测试类: RXInitializeTestObject

输出结果

第一行输出:是因为初始化 RXInitializeCustomObject 会先初始化其父类 RXInitializeParentObject
第二行输出:对于 RXInitializeCustomObject 来说,它有自己的 initialize 方法。

测试类: RXInitializeTestObject

输出结果

第一行输出,是因为使用 RXInitializeEmptyObject 初始化其父类
第二行输出,是因为使用 RXInitializeEmptyObject 初始化自己
第三行输出,是因为使用 RXInitializeCustomObject

测试类: RXInitializeTestObject

输出结果

大家可以自己尝试分析一下~~~

类 RXInitializeCustom2Object ,内容跟 RXInitializeCustomObject 几乎一样

测试类: RXInitializeTestObject

输出结果:

结果也是很容易分析的。

类 RXInitializeSuperCustomObject

测试类: RXInitializeTestObject

输出结果

其中第二行是因为 [super initialize] 导致的。

以上就是关于 +initialize 方法被调用次数探究,包括理论部分和Demo部分。




initialize是什么意思 initialize的中文翻译、读音、例句?
initialize的意思是”正在初始化、计”,还经常被翻译为设备对象正在初始化,发音音标为[in’iʃəlaiz],initialize是一个英语动词,在《荷林斯英英小词典》中,共找到52个与initialize相关的近义词和例句 initialize的翻译1.正在初始化 例句:The framework creates an instance of the plug-in...

initialize是什么意思
initialize属于计算机语言,是计算机命令。功能介绍 编辑 预置(初始状态), 初始化 initialize 隐藏摘要 初始化 Customizing3 自定义模式3...1. initialize(初始化)。起始;预置 initialization 起始;恢复;清除;预置...initialize 起始;预置...initializing constraint 初始约束条件 设定初值 初速 initial ...

initialize是什么意思
initialize是初始化的意思

“initialize”是什么意思及反义词?
释义:initialize 英 [ɪ'nɪʃəlaɪz] 美 [ɪ'nɪʃəlaɪz] vt. 初始化。恢复,复原。反义词:没有对应的反义词,可用 become ultimate 表示,“使成为终极”。词语搭配:device initialize设备初始化 initialize mode初始化方式 initial...

init是什么意思英文?
init是英文中的一个缩写词,全称是initialize,意思是初始化。在计算机编程中,初始化是指对变量、对象或程序进行一些必要的初始化操作,以便它们在使用前能够达到一种可预测和一致的状态。在实际使用中,init也可以指代特定的初始化函数或初始化模块,用于初始化系统或应用程序。init通常被用来执行一些重要的...

initialize是什么意思
initialize 英 [ɪˈnɪʃəlaɪz] 美 [ɪˈnɪʃəˌlaɪz]vt.初始化 双语例句 To initialize and change the screen and printer fonts.以初始化和更改屏幕和打印机字体。

initialize什么意思?
initialize意思是初始化。短语 Initialize Project 初始化项目 ; 项目初始化 ; 选择初始化项目 Initialize segments 是否在连接时初始化没有初始化的段 to initialize 初始化 例句:1、When you have attributes in a class, you need to be able to initialize these attributes with some initial values...

initialized是什么意思
在技术语境中,"initialized"是一个形容词,源自动词"initialize"的过去分词形式。它主要表示某物已经被设置了初始状态或配置,通常在计算机编程、系统设置以及软件开发中使用,指的是对数据、对象或系统进行初次设置、配置或启动的过程。这个词语涉及的不仅是物理意义上的开始,更深层次的是逻辑上的初始化,...

initializing是什么意思
initializing意思:n. 初始化,动词initialize的现在分词形式.一、读音:英[ɪˈnɪʃəlaɪzɪŋ];美[ɪˈnɪʃəlaɪzɪŋ]二、例句:An error occurred when initializing bug reporting on your computer....

initializing是什么意思
initializing意思:n. 初始化,动词initialize的现在分词形式.一、读音:英[ɪˈnɪʃəlaɪzɪŋ];美[ɪˈnɪʃəlaɪzɪŋ]二、例句:Opening log files and initializing usage statistics.打开日志文件和...

武强县18766023087: initializegl何时被调用 -
丘相舒林: 第一个Form,Form1: string value = string.Empty; using (Form2 frm = new Form2()) { if (frm.ShowDialog() == DialogResult.OK) { //value就是Form2关闭的时候传出的 value = frm.OutValue; } } MessageBox.Show(value); 第二个Form2: /// 传出参数 ...

武强县18766023087: php中的initialize方法是什么意思 -
丘相舒林: 初始化函数,预加载时使用,有较高的运行优先级.如果我的回答没能帮助您,请继续追问.您也可以向我们团队发出请求,会有更专业的人来为您解答.

武强县18766023087: java中initialize是什么意思 -
丘相舒林: 初始化的意思

武强县18766023087: thinkphp中,为什么我的 - initialize方法会执行了两遍 呢 求解? -
丘相舒林: 看你的_initialize放在common里了是吧,然后,别的Action继承了Common,就会继承了这个父类的初始化,在初始化一个子控制器的时候,父类控制器也会执行,所以是两次,避免情况,就是在子类重写_initialize方法

武强县18766023087: js中initialize: function(x, y){}有什么作用 -
丘相舒林: 定义initialize是一个function 其实和function initialize(x,y){}是一个意思,不过initialize:这种方式一把是把initialize当成一个属性来使用,而function initialize更多的意思是定义一个方法(函数?) 至于调用都是一样的initialize(2,3);

武强县18766023087: Objective C类方法load和initialize的区别 -
丘相舒林: 先来看看NSObject Class Reference里对这两个方法说明:+(void)initializeThe runtime sends initialize to each class in a program exactly one time just before the class, or any class that inherits from it, is sent its first message from within the ...

武强县18766023087: 笔记本电脑蓝屏initialize -
丘相舒林: 1、蓝屏前下载了什么软件、补丁、插件、驱动等全部卸载试试,如果是驱动不合适,请下载驱动精灵升级驱动. 2、如果电脑有木马,请下载Win清理助手、金山卫士、360急救箱查杀木马. 3、如果不经常出现蓝屏关机在开机就可以了,还是...

武强县18766023087: c++的构造函数和Initialize函数有什么区别 -
丘相舒林: C++里有Initialize函数?Initialize是指自己写的初始化函数吧?构造函数不需要也不能显示调用,但初始化函数需要显示调用==================== Initialize是系统提供的,系统也不会自己调用 那个不算显示调用,显示调用应该类似 xx.Func(); pxx->Func();

武强县18766023087: 如何让普通变量也支持事务回滚? -
丘相舒林: 有一次和人谈起关于事务的话题,谈到怎样的资源才能事务型资源.除了我们经常使用的数据库、消息队列、事务型文件系统(TxF)以及事务性注册表(TxR)等,还有那些资源直接可以纳入事务进行状态的管理呢?我说如果我们按照.NET事...

武强县18766023087: 在一个JAVA程序中,我看到把这个 init();initDrivers();放到构造方法中 这个是起什么作用呢? -
丘相舒林: init是initialize的缩写,意思是初始化,就是说一加载这个程序就运行这个函数.重新加载的话也会执行这个函数.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网