- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
documentation对于 objc_duplicateClass
简单地读取
Used by Foundation's Key-Value Observing. Do not call this function yourself.
没有详细说明或解释。我读了source ,但是除了一些理论之外,没有看到任何东西可以告诉我为什么你不应该调用它;除了 load
和 initialize
不会为 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/
我是一名优秀的程序员,十分优秀!