1

我需要使用我编写的自定义类作为NSMutableDictionary(在这种情况下为 ASocket类)中的键。

在 Java 中,当我使用HashMapor时TreeMap,该对象分别需要一个哈希函数或比较器函数来操作字典。一般来说,字典需要知道一些比较键的方法。

根据我在文档中阅读的内容,看起来我不必这样做才能使用NSMutableDictionary。那是对的吗?如果是,有谁知道他们是如何实现密钥比较的?

4

2 回答 2

4

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

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

于 2012-07-12T18:34:49.673 回答
3

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

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

于 2012-07-12T18:29:34.887 回答