我需要使用我在NSMutableDictionary
(A Socket
类中作为密钥编写的自定义类,在这种情况下。)
在Java中,当我使用HashMap
或TreeMap
时,该对象分别需要哈希函数或比较器函数才能使字典运行。通常,字典需要知道一些比较键的方法。
从我在文档中看到的内容来看,我不得不这样做才能使用NSMutableDictionary
。那是对的吗?如果是的话,是否有人知道他们如何实施密钥比较?
答案 0 :(得分:4)
-hash的默认实现基于对象的实例地址,因此在NSDictionary中使用它作为键可能是一个不好的选择。因此,默认情况下,两个逻辑上相等的类实例将映射到字典中的两个不同条目,直到您正确覆盖 -isEqual和-hash以反映您的逻辑。
除此之外,您绝对需要正确覆盖-copyWithZone:也反映您的相等逻辑,因为NSDictionary会复制它的密钥。
答案 1 :(得分:3)
只要密钥符合NSCopying
(NSObject
没有,但很多事情都符合),它就可以用作密钥。密钥将使用copyWithZone:
复制。
关于它是如何工作的,它就像你在Java中注意到的那样工作。 “该对象分别需要散列函数或比较器函数才能使字典运行。”每个NSObject
都会实现hash
和isEqual:
。