如何为NSDictionary实现自定义键

Dar*_*ren 3 collections objective-c

我正在尝试实现一个类用作NSDictionary中的键.文档说,为了用作密钥,对象需要实现NSCopying协议,我已经完成了.

我看到了一些非常奇怪的行为,即使我可以看到对象在字典中正确存储,但它似乎神秘地变为零.

我已经实现了copyWithZone:和isEqual:正如我所看到的那样,但它仍然无效.

Dar*_*ren 6

文档没有说清楚的是,要使用对象作为NSDictionary中的键,它必须覆盖isEqual:和hash方法,以及实现NSCopying.

isEqual:和hash的契约是,如果isEqual:为2个对象返回YES,那么它们的哈希方法必须返回相同的值.2个不等于具有相同哈希值的对象是可以的但如果它们相等则它们必须具有相同的哈希值.

当您尝试从字典中读取和写入时,未能正确覆盖哈希将导致各种难以调试的问题.