我需要使用我编写的自定义类作为NSMutableDictionary
(在这种情况下为 ASocket
类)中的键。
在 Java 中,当我使用HashMap
or时TreeMap
,该对象分别需要一个哈希函数或比较器函数来操作字典。一般来说,字典需要知道一些比较键的方法。
根据我在文档中阅读的内容,看起来我不必这样做才能使用NSMutableDictionary
。那是对的吗?如果是,有谁知道他们是如何实现密钥比较的?
我需要使用我编写的自定义类作为NSMutableDictionary
(在这种情况下为 ASocket
类)中的键。
在 Java 中,当我使用HashMap
or时TreeMap
,该对象分别需要一个哈希函数或比较器函数来操作字典。一般来说,字典需要知道一些比较键的方法。
根据我在文档中阅读的内容,看起来我不必这样做才能使用NSMutableDictionary
。那是对的吗?如果是,有谁知道他们是如何实现密钥比较的?
-hash 的默认实现基于对象的实例地址,因此在 NSDictionary 中用作键可能是一个不好的选择。因此,默认情况下,您的类的两个逻辑相等的实例将映射到字典中的两个不同条目,直到您正确覆盖-isEqual和 -hash 以反映您的逻辑。
除此之外,您绝对需要正确覆盖 -copyWithZone: 以反映您的相等逻辑,因为 NSDictionary 复制它的键。
只要密钥符合NSCopying
(NSObject
不符合,但很多事情符合),它就可以用作密钥。将使用 复制密钥copyWithZone:
。
关于它是如何工作的,它就像你在 Java 中提到的那样工作。“该对象分别需要哈希函数或比较器函数才能使字典运行。” 每个都NSObject
实现hash
和isEqual:
。