gpt4 book ai didi

objective-c - 为什么 objc_duplicateClass 标记为 "Do not call this function yourself"

转载 作者:搜寻专家 更新时间:2023-10-30 20:24:04 25 4
gpt4 key购买 nike

documentation对于 objc_duplicateClass 简单地读取

Used by Foundation's Key-Value Observing. Do not call this function yourself.

没有详细说明或解释。我读了source ,但是除了一些理论之外,没有看到任何东西可以告诉我为什么你不应该调用它;除了 loadinitialize 不会为 objc_duplicateClass 创建的类调用?

看起来你可以通过调用 objc_allocateClassPair 来产生几乎相同的效果,没有额外的字节用于额外的 ivars,然后立即注册它。那么 objc_duplicateClass 有什么特别之处呢?或者,换句话说,假设我想在 objc 运行时之上构建 KVO 或非常类似的东西,使用 objc_duplicateClass 是否安全?

最佳答案

objc_duplicateClass 的功能与它在 jar 上所说的差不多:它生成一个新类,它是您提供给它的类的副本。这包括复制旧类的方法、它的所有元数据位,甚至它的元类。

您无法使用 objc_allocateClassPair 重新创建此行为,因为 objc_allocateClassPair 为您创建的类注册了一个新的元类,其中包括初始化类 - 它旨在创建一个 类。 objc_duplicateClass 创建一个副本; "new"类没有进一步初始化,也没有获得新的元类,因为原始类已经完成了。

至于为什么 objc_duplicateClass 是这样记录的:阻止它的使用。 objc_duplicateClass 有一些罕见的用例,而且几乎永远不是你想要的。如果您发现需要它,请使用它,但请记住,您可能没有意识到实现的一些微妙之处。

关于objective-c - 为什么 objc_duplicateClass 标记为 "Do not call this function yourself",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43700116/

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