NSDictionary中密钥的要求是什么?

时间:2012-07-12 18:20:18

标签: cocoa-touch nsdictionary

我需要使用我在NSMutableDictionary(A Socket类中作为密钥编写的自定义类,在这种情况下。)

在Java中,当我使用HashMapTreeMap时,该对象分别需要哈希函数或比较器函数才能使字典运行。通常,字典需要知道一些比较键的方法。

从我在文档中看到的内容来看,我不得不这样做才能使用NSMutableDictionary。那是对的吗?如果是的话,是否有人知道他们如何实施密钥比较?

2 个答案:

答案 0 :(得分:4)

-hash的默认实现基于对象的实例地址,因此在NSDictionary中使用它作为键可能是一个不好的选择。因此,默认情况下,两个逻辑上相等的类实例将映射到字典中的两个不同条目,直到您正确覆盖 -isEqual和-hash以反映您的逻辑。

除此之外,您绝对需要正确覆盖-copyWithZone:也反映您的相等逻辑,因为NSDictionary会复制它的密钥。

答案 1 :(得分:3)

只要密钥符合NSCopyingNSObject没有,但很多事情都符合),它就可以用作密钥。密钥将使用copyWithZone:复制。

关于它是如何工作的,它就像你在Java中注意到的那样工作。 “该对象分别需要散列函数或比较器函数才能使字典运行。”每个NSObject都会实现hashisEqual: