- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 NSCopyObject
的 Xcode 文档中,特殊注意事项部分指出:
This function is dangerous and very difficult to use correctly. It's use as part of
copyWithZone:
by any class that can be subclassed, is highly error prone. Under GC or when using Objective-C 2.0, the zone is completely ignored.This function is likely to be deprecated after Mac OS X 10.6.
为什么很难正确使用?它执行浅层(逐位)复制。对象不会被复制或保留。文档对此非常清楚。
如果我没有遗漏其他原因,执行对象浅拷贝的首选替代方案是什么?
编辑:
有充分的理由想要执行浅拷贝。举个例子:一个类可能有很多实例变量,其中大部分是原始类型(整数、 float )或有意不保留以避免保留循环(委托(delegate))的对象。使用 NSCopyObject
的浅拷贝将所有这些复制到一个漂亮的、 self 记录的代码行中。任何需要引用计数的剩余 ivar 都可以单独保留或复制。
替代方法是使用指针语法 (newObject->ivar = ivar
) 分配给新对象,或者创建一个具有可能大量参数的 init 方法(每个参数一个) ivar 复制)。后者让我觉得特别难看,但我想它不需要出现在标题中并暴露给世界。
最佳答案
您不应该制作不涉及正确保留/释放的浅拷贝。期间。
关于objective-c - NSCopyObject 被认为是有害的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3451380/
在 NSCopyObject 的 Xcode 文档中,特殊注意事项部分指出: This function is dangerous and very difficult to use correctl
我是一名优秀的程序员,十分优秀!