2

我知道一个类必须实现NSCopying才能成为一个键NSDictionary,但是实现isEqual:并且hash也是必要的或可取的?

如果是,为什么?

4

2 回答 2

7

是的。

为什么?

考虑访问字典的元素,如何NSDictionary找到与键关联的对象?通过您提供的键值与字典中的键进行比较。

这是一个规则,当你实现时isEqual:,你也实现了hash,比较相等的对象必须具有相同的哈希值。进一步考虑字典如何组织键/值对的存储,它使用基于散列的存储结构。

高温高压

附录

看到我猜是您还问过的一个相关问题,我将限定上述“是”:

如果一个类继承isEqual:hash为自己适当地定义相等性的方法,它不需要用它自己的版本覆盖这些方法。如果类直接继承自NSObject.

于 2015-04-22T21:46:40.573 回答
1

您可以在文档中找到它: https ://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/index.html

字典中的键值对称为条目。每个条目由一个表示键的对象和另一个表示键值的对象组成。在字典中,键是唯一的。也就是说,单个字典中没有两个键是相等的(由 isEqual: 确定)。一般来说,键可以是任何对象(只要它符合 NSCopying 协议——见下文),但请注意,当使用键值编码时,键必须是字符串(见键值编码基础)。键和值都不能为 nil;如果你需要在字典中表示一个空值,你应该使用 NSNull

于 2015-04-22T21:49:27.807 回答