OStack程序员社区-中国程序员成长平台

标题: ios - 对默认的 isEqual 和 hash 实现感到困惑 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 19:22
标题: ios - 对默认的 isEqual 和 hash 实现感到困惑

我知道我可以重写 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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4