在为NSCopyObject
Xcode的文件中,特别考虑部分指出:NSCopyObject认为有害?
此功能是危险的,很难正确使用。它可以作为
copyWithZone:
的一部分使用,任何可以分类的类都是非常容易出错的。在GC或使用Objective-C 2.0时,该区域完全被忽略。此功能在Mac OS X 10.6之后很可能会被弃用。
为什么难以正确使用?它执行浅(逐位)复制。对象不被复制或保留。这个文件很清楚。
如果我不遗漏其他原因,执行对象的浅拷贝的首选方法是什么?
编辑:
有正当的理由想执行一个浅拷贝。一个例子:一个类可能有许多实例变量,其中大部分是基本类型(整型,浮点型)或有意不保留以避免保留循环(委托)的对象。使用NSCopyObject
的浅拷贝将所有这些拷贝到一个很好的,自我记录的代码行中。任何需要引用计数的剩余ivars可以单独保留或复制。
另一种方法是使用指针语法(newObject->ivar = ivar
)分配给新对象,或者创建一个可能有大量参数(每个ivar要复制一个)的init方法。后者让我觉得特别难看,但我认为它不需要放在标题中并且暴露于世界。
是的,这非常有帮助!关键的收获:'NSCopyObject'会使保留对象的保留/释放余额搞砸,这就要求在通常情况下会产生错误的子类中进行修复。 – 2011-04-08 18:24:08