gpt4 book ai didi

Objective-C:什么是惰性类?

转载 作者:太空狗 更新时间:2023-10-30 03:28:04 26 4
gpt4 key购买 nike

查看 Objective-C 运行时库源代码,特别是 objc-runtime-new.mm ,我看到了一些函数甚至注释提到了惰性和非惰性类。似乎没有 +load 方法的类被称为惰性类,但我不确定,很可能这是不对的。在 Google 上搜索后,我没有找到任何有关 Objective-C 上的惰性类的信息。

那么,Objective-C 中的惰性类是什么? Obj-C 有这个功能吗?它是否与类实现中的 +load 方法有关?在上面链接的文件中,运行时系统调用一个名为 _getObjc2NonlazyClassList 的函数,以便从图像中获取非延迟类列表。为什么也没有 _getObjc2LazyClassList 函数?

最佳答案

我找到了答案:这完全取决于一个类是否实现了 +load 方法。

给定图像文件中实现的所有类都在存储在 "__DATA, __objc_classlist, regular, no_dead_strip" 二进制部分的列表中有一个引用。该列表允许运行时系统跟踪存储在此类文件中的所有类。但是,并不是所有的类都需要在程序启动时实现。这就是为什么当一个类实现 +load 方法时,它还在存储在 "__DATA, __objc_nlclslist, regular, no_dead_strip" 部分的列表中有一个引用。

因此,_getObjc2NonlazyClassList 检索确实实现了 +load 方法并被称为非惰性的类的列表。 _getObjc2ClassList 检索图像文件中所有类的列表,包括没有 +load 方法(称为惰性)的类和非惰性类那些。非惰性类必须在程序启动时实现。另一方面,惰性类不需要立即实现。这可能会延迟到类(class)第一次收到消息(例如,这就是他们被认为“懒惰”的原因)。

顺便说一句,类别也是如此。

关于Objective-C:什么是惰性类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15315668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com