【问题标题】:How do implement a custom key for NSDictionary如何为 NSDictionary 实现自定义键
【发布时间】:2013-02-06 20:18:25
【问题描述】:

我正在尝试实现一个类以用作 NSDictionary 中的键。文档说,为了用作键,对象需要实现 NSCopying 协议,我已经这样做了。

我看到一些非常奇怪的行为,其中值似乎神秘地变为 nil,即使我可以看到对象被正确存储在字典中。

据我所知,我已经正确实现了 copyWithZone: 和 isEqual:,但它仍然无法正常工作。

【问题讨论】:

    标签: objective-c collections


    【解决方案1】:

    文档没有明确说明的是,要将对象用作 NSDictionary 中的键,它必须同时覆盖 isEqual: 和 hash 方法,以及实现 NSCopying。

    isEqual: 和 hash 的约定是,如果 isEqual: 为 2 个对象返回 YES,那么它们的 hash 方法必须返回相同的值。两个不相等的对象具有相同的散列是可以的,但如果它们相等,那么它们必须具有相同的散列。

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

    【讨论】:

    • 你必须实现:-(NSUInteger)hash 和 -(BOOL)isEqual:(id)other 和 -(id)copyWithZone:(NSZone*)zone
    猜你喜欢
    • 2019-12-29
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 2014-02-15
    • 2017-12-01
    • 2014-09-27
    • 2011-03-30
    相关资源
    最近更新 更多