2010-08-10 23 views
4

在为NSCopyObject Xcode的文件中,特别考虑部分指出:NSCopyObject认为有害?

此功能是危险的,很难正确使用。它可以作为copyWithZone:的一部分使用,任何可以分类的类都是非常容易出错的。在GC或使用Objective-C 2.0时,该区域完全被忽略。

此功能在Mac OS X 10.6之后很可能会被弃用。

为什么难以正确使用?它执行浅(逐位)复制。对象不被复制或保留。这个文件很清楚。

如果我不遗漏其他原因,执行对象的浅拷贝的首选方法是什么?

编辑:

有正当的理由想执行一个浅拷贝。一个例子:一个类可能有许多实例变量,其中大部分是基本类型(整型,浮点型)或有意不保留以避免保留循环(委托)的对象。使用NSCopyObject的浅拷贝将所有这些拷贝到一个很好的,自我记录的代码行中。任何需要引用计数的剩余ivars可以单独保留或复制。

另一种方法是使用指针语法(newObject->ivar = ivar)分配给新对象,或者创建一个可能有大量参数(每个ivar要复制一个)的init方法。后者让我觉得特别难看,但我认为它不需要放在标题中并且暴露于世界。

回答

2

也许你会发现这篇文章有用:
http://robnapier.net/blog/implementing-nscopying-439

+0

是的,这非常有帮助!关键的收获:'NSCopyObject'会使保留对象的保留/释放余额搞砸,这就要求在通常情况下会产生错误的子类中进行修复。 – 2011-04-08 18:24:08

1

您不应该制作不涉及正确保留/释放的浅拷贝。期。

+1

很明显,但解决了那些引用是由开发人员。你的回答没有解决我为什么'NSCopyObject'是危险的,很难正确使用的问题。“ – 2010-08-10 18:40:09

相关问题