【发布时间】:2013-03-09 20:38:52
【问题描述】:
查看 Objective-C 运行时库源代码,特别是在 objc-runtime-new.mm,我看到一些函数甚至 cmets 引用了惰性和非惰性类。似乎没有 +load 方法的类被称为惰性类,但我不确定这一点,而且很可能这是不对的。在 Google 上搜索后,我没有找到任何关于 Objective-C 上惰性类的信息。
那么,什么是 Objective-C 中的惰性类? Obj-C 有这个功能吗?它是否与类的实现中存在+load 方法有关?在上面链接的文件中,运行时系统调用一个名为 _getObjc2NonlazyClassList 的函数,以便从图像中获取非惰性类的列表。为什么没有_getObjc2LazyClassList 函数呢?
【问题讨论】:
-
可能是从插件加载的类。也许检查有关插件/dyld/动态加载代码的文档
-
你确定这意味着该类是懒惰的,而不仅仅是列表?
-
我同意@JoshCaswell,因为稍后在运行时源代码中会引用延迟加载类。它几乎可以肯定是指列表,而不是“懒惰”的类。
-
@JoshCaswell @lxt 我还认为这是一个应该稍后加载的类列表,我不确定。但是在代码的某个点上,我发现了注释“// 实现非惰性类(用于 +load 方法和静态实例)”。在此评论之后,有一个对
_getObjc2NonlazyClassList的调用,它似乎得到了一个惰性类列表(我还不确定),而不是一个惰性类列表。
标签: objective-c lazy-evaluation objective-c-runtime