• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 对默认的 isEqual 和 hash 实现感到困惑

[复制链接]
菜鸟教程小白 发表于 2022-12-12 19:22:29 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我知道我可以重写 hash 和 isEqual 来检查 2 个实例是否相等。 Xcode 有默认的片段和文档 https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/ObjectComparison.html如下

- (BOOL)isEqualid)other
{
    if (other == self) {
        return YES;
    } else if (![super isEqualther]) { //WHAT is this line mean ?
        return NO;
    } else {
        return <#comparison expression#>;
    }
}

- (NSUInteger)hash
{
    return <#hash expression#>;
}

好的,

  1. other == self检查两个对象的指针。

  2. 如果 ![super isEqualther],这行是什么意思?如果 super 对象不等于其他对象,则返回 NO ?那么它会一直返回NO,不会执行第3步。

我错了吗?

谢谢。



Best Answer-推荐答案


这是类层次结构中的典型实现,也就是说,如果您的类派生自具有自己有意义的 isEqual: 实现的父类(super class)。在这种情况下,让父类(super class)测试公共(public)属性的相等性是明智的。如果公共(public)部分不相等,那么派生对象就不可能相等。

如果直接从NSObject派生则不需要。

实际上,您还需要一个额外的步骤:

- (BOOL)isEqualid)other
{
    if (other == self) {
        return YES;
    } else if (![super isEqualther]) {
        return NO;
    } else if (![other isKindOfClass:[MyClass class]]) {
        return NO; // comparing incompatible objects 
    } else {
        MyClass *myOther = (MyClass *) other;
        return <#compare between self and myOther#>;
    }
}

关于ios - 对默认的 isEqual 和 hash 实现感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36593038/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap