4

在 Xcode 文档中NSCopyObject,特殊注意事项部分指出:

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

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

为什么很难正确使用?它执行浅(逐位)复制。对象不会被复制或保留。文档对此非常清楚。

如果我没有错过其他原因,那么执行对象浅拷贝的首选方法是什么?

编辑:

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

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

4

1 回答 1

1

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

于 2010-08-10T17:37:51.620 回答