2011-09-20 96 views
0

我很难理解copyWithZone。NSCopying和copyWithZone: - 他们应该返回[自我保留]还是其他?

我知道它应该返回一个副本,但是如果我将一个对象添加到字典中,它会向字典中添加一个'copyWithZone'对象。如果我制作了实际的副本(即新对象),则添加到字典中的对象将不会是同一个对象。但是,如果我只增加保留计数,那么它在技术上不是副本。

我应该保留自己还是制作实际的副本?

回答

2

copyWithZone:应该返回一个不可变的对象(如果该类有不可变和可变的版本)。如果原始文件是不可变的,只需保留返回原文将是安全的,因为没有任何所有者可以改变该对象。否则(即原始文件是可变的或不可变/可变的二分法不适用),返回一份副本。

至于NSDictionaryNSMutableDictionary,一般只有钥匙被复制(如果你明确地说,与-initWithDictionary:copyItems:项目仅复制),作为字典的内部数据结构取决于键值这是必要的。如果您要改变字典所使用的密钥,它会破坏字典的数据结构,并且您将无法再检索该密钥的项目,或者更糟。

相关问题