我知道一个类必须实现NSCopying
才能成为一个键NSDictionary
,但是实现isEqual:
并且hash
也是必要的或可取的?
如果是,为什么?
我知道一个类必须实现NSCopying
才能成为一个键NSDictionary
,但是实现isEqual:
并且hash
也是必要的或可取的?
如果是,为什么?
是的。
为什么?
考虑访问字典的元素,如何NSDictionary
找到与键关联的对象?通过将您提供的键值与字典中的键进行比较。
这是一个规则,当你实现时isEqual:
,你也实现了hash
,比较相等的对象必须具有相同的哈希值。进一步考虑字典如何组织键/值对的存储,它使用基于散列的存储结构。
高温高压
附录
看到我猜是您还问过的一个相关问题,我将限定上述“是”:
如果一个类继承isEqual:
和hash
为自己适当地定义相等性的方法,它不需要用它自己的版本覆盖这些方法。如果类直接继承自NSObject
.
字典中的键值对称为条目。每个条目由一个表示键的对象和另一个表示键值的对象组成。在字典中,键是唯一的。也就是说,单个字典中没有两个键是相等的(由 isEqual: 确定)。一般来说,键可以是任何对象(只要它符合 NSCopying 协议——见下文),但请注意,当使用键值编码时,键必须是字符串(见键值编码基础)。键和值都不能为 nil;如果你需要在字典中表示一个空值,你应该使用 NSNull