作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试实现一个用作 NSDictionary 中的键的类。文档说,为了用作键,对象需要实现 NSCopying 协议(protocol),我已经做到了。
我看到了一些非常奇怪的行为,即使我可以看到对象被正确存储在字典中,值似乎神秘地变成了 nil。
据我所知,我已经正确地实现了 copyWithZone: 和 isEqual:,但它仍然无法正常工作。
最佳答案
文档没有明确说明的是,要将对象用作 NSDictionary 中的键,它必须覆盖 isEqual: 和 hash 方法,以及实现 NSCopying。
isEqual: 和 hash 的约定是,如果 isEqual: 对 2 个对象返回 YES,那么它们的 hash 方法必须返回相同的值。 2 个不相等的对象具有相同的哈希值是可以的,但如果它们相等,则它们必须具有相同的哈希值。
当您尝试从字典中读写时,未能正确覆盖哈希将导致各种难以调试的问题。
关于objective-c - 如何为 NSDictionary 实现自定义键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14728921/
我是一名优秀的程序员,十分优秀!