如何在NSDictionary中实现自定义键

3
我正在尝试实现一个类,用作NSDictionary中的键。文档中说,为了用作键,对象需要实现NSCopying协议,我已经做到了这一点。
我看到了一些非常奇怪的行为,即使我可以看到对象在字典中被正确存储,但值似乎会神秘地变成nil。
据我所见,我已经正确实现了copyWithZone:和isEqual:,但仍然不能正常工作。
1个回答

6
文档没有明确说明,在使用对象作为NSDictionary的键时,必须重写isEqual:和hash方法,并实现NSCopying。isEqual:和hash的约定是,如果isEqual:对两个对象返回YES,则它们的hash方法必须返回相同的值。两个不相等的对象可以有相同的哈希值,但如果它们相等,则必须具有相同的哈希值。如果未正确重写哈希,则在尝试从字典中读取和写入数据时会导致各种难以调试的问题。

你需要实现以下方法:-(NSUInteger)hash,-(BOOL)isEqual:(id)other和-(id)copyWithZone:(NSZone*)zone。 - fingerup

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