要成为NSDictionary的关键,一个类也必须实现isEqual:和hash?

cfi*_*her 2 cocoa objective-c nsdictionary nscopying

我理解一个类必须实现NSCopying才能成为一个关键NSDictionary,但是正在实现isEqual:,hash也是必要或可取的?

如果是,为什么?

CRD*_*CRD 7

是.

为什么?

考虑访问字典的元素,如何NSDictionary找到与键相关联的对象?通过比较您提供的键值和字典中的键.

当您实现isEqual:同时实现时hash,比较相等的对象必须具有相同的哈希值.进一步考虑字典如何组织键/值对的存储,它使用基于散列的存储结构.

HTH

附录

看到我猜是一个相关的问题,你也问过我将符合以上"是"的资格:

如果一个类继承isEqual:hash其适当定义平等本身方法它不需要重写与它自己的版本的方法.如果类直接继承,那么这很可能不会成立NSObject.