我知道我可以重写 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#>;
}
好的,
other == self 检查两个对象的指针。
如果 ![super isEqualther] ,这行是什么意思?如果 super 对象不等于其他对象,则返回 NO ?那么它会一直返回NO ,不会执行第3步。
我错了吗?
谢谢。
Best Answer-推荐答案 strong>
这是类层次结构中的典型实现,也就是说,如果您的类派生自具有自己有意义的 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/
|