NSCopyObject是否有害?

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

1

你不应该制作一个浅拷贝,而没有正确的保留/释放。这是绝对的。


1
显然,但修复这些引用是开发者的责任。你的答案没有回答我关于为什么"NSCopyObject"很危险且非常难以正确使用的问题。 - Steve Madsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接