在Xcode文档中,
该函数很危险且难以正确使用。如果任何可被子类化的类作为
该函数可能会在Mac OS X 10.6之后被弃用。
为什么它难以正确使用?它执行浅复制(按位拷贝)。对象不会被复制或保留。文档对此非常明确。
如果没有其他原因,那么有没有更好的替代方法来执行对象的浅复制?
编辑:
有合理的理由想要执行浅复制。一个例子:一个类可能有许多实例变量,其中大多数是原始类型(整数、浮点数)或故意不被保留以避免保留循环(委托)的对象。使用
这个的替代方法是要么使用指针语法(
NSCopyObject
的特别注意事项部分指出:该函数很危险且难以正确使用。如果任何可被子类化的类作为
copyWithZone:
的一部分使用,则容易出现错误。在GC或使用Objective-C 2.0时,区域完全被忽略。该函数可能会在Mac OS X 10.6之后被弃用。
为什么它难以正确使用?它执行浅复制(按位拷贝)。对象不会被复制或保留。文档对此非常明确。
如果没有其他原因,那么有没有更好的替代方法来执行对象的浅复制?
编辑:
有合理的理由想要执行浅复制。一个例子:一个类可能有许多实例变量,其中大多数是原始类型(整数、浮点数)或故意不被保留以避免保留循环(委托)的对象。使用
NSCopyObject
执行浅复制可以在一行代码中复制所有这些变量,并具有良好的自述性。任何需要进行引用计数的剩余实例变量都可以单独保留或复制。这个的替代方法是要么使用指针语法(
newObject->ivar = ivar
)为新对象赋值,要么创建一个具有大量参数(每个要复制的实例变量都需要一个)的init方法。后者在我看来特别丑陋,但我想它不需要出现在头文件中并暴露给全世界。