3

我正在尝试实现一个类以用作 NSDictionary 中的键。文档说,为了用作键,对象需要实现我已经完成的 NSCopying 协议。

我看到一些非常奇怪的行为,即使我可以看到对象被正确存储在字典中,值似乎也神秘地变成了 nil。

据我所知,我已经正确实现了 copyWithZone: 和 isEqual: ,但它仍然无法正常工作。

4

1 回答 1

6

文档没有明确说明的是,要将对象用作 NSDictionary 中的键,它必须同时覆盖 isEqual: 和哈希方法,以及实现 NSCopying。

isEqual: 和 hash 的约定是,如果 isEqual: 为 2 个对象返回 YES,那么它们的 hash 方法必须返回相同的值。两个不相等的对象具有相同的散列是可以的,但如果它们相等,那么它们必须具有相同的散列。

当您尝试从字典中读取和写入时,未能正确覆盖哈希将导致各种难以调试的问题。

于 2013-02-06T12:18:25.173 回答