2011-09-26 21 views
1

首先,我想我理解正确的NSCopying确认...NSCopying,copyWithZone和NSDictionary的

为了用一个简单的NSObject的子类作为一个NSDictionary的关键,我必须把它实现NSCopying协议。在复制实例的copyWithZone方法中,我必须为我的类分配/ init一个新实例,将其属性设置为与复制的实例相同并返回它。

其次,为什么NSDictionary使用添加到它的实例副本而不是实例本身?

+0

复制词典中的键。对象被保留。通常,字符串被用作键,并且因为它们符合NSCopying,所以没有问题。如果由于某种原因你想使用其他类型的对象,你必须确定它符合NSCopying。 – trudyscousin

+0

感谢您的回复。你能解释为什么要复制密钥吗? – Undistraction

+0

看看http://stackoverflow.com/questions/2394083/cocoas-nsdictionary-why-are-keys-copied – trudyscousin

回答

3

如果是子对象,子类不需要实现NSCopying,密钥通常应该是NSString s,它们被复制。

+0

右键:只有键需要实现'NSCopying'。 – Wevah

+0

对不起,我不清楚。该对象将用作关键。我已经修改了这个问题来反映这一点。那为什么它需要一个对象的副本而不是对象本身呢? – Undistraction

+0

看看这个问题:http://stackoverflow.com/questions/2394083 – hypercrypt

1
  1. 您必须实现NSCopying协议的每个自定义类,如果你想使他们能够复制
  2. ,因为如果你将修改包含在原始字典的对象是副本将不会受到影响,必须使用复制更改