ios - 对默认的 isEqual 和 hash 实现感到困惑
<p><p>我知道我可以重写 hash 和 <code>isEqual</code> 来检查 2 个实例是否相等。 Xcode 有默认的片段和文档 <a href="https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/ObjectComparison.html" rel="noreferrer noopener nofollow">https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/ObjectComparison.html</a>如下</p>
<pre><code>- (BOOL)isEqual:(id)other
{
if (other == self) {
return YES;
} else if (!) { //WHAT is this line mean ?
return NO;
} else {
return <#comparison expression#>;
}
}
- (NSUInteger)hash
{
return <#hash expression#>;
}
</code></pre>
<p>好的,</p>
<ol>
<li><p><code>other == self</code>检查两个对象的指针。</p></li>
<li><p>如果 <code>!</code>,这行是什么意思?如果 super 对象不等于其他对象,则返回 NO ?那么它会一直返回<code>NO</code>,不会执行第3步。</p></li>
</ol>
<p>我错了吗?</p>
<p>谢谢。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>这是类层次结构中的典型实现,也就是说,如果您的类派生自具有自己有意义的 <code>isEqual:</code> 实现的父类(super class)。在这种情况下,让父类(super class)测试公共(public)属性的相等性是明智的。如果公共(public)部分不相等,那么派生对象就不可能相等。</p>
<p>如果直接从<code>NSObject</code>派生则不需要。</p>
<p>实际上,您还需要一个额外的步骤:</p>
<pre><code>- (BOOL)isEqual:(id)other
{
if (other == self) {
return YES;
} else if (!) {
return NO;
} else if (!]) {
return NO; // comparing incompatible objects
} else {
MyClass *myOther = (MyClass *) other;
return <#compare between self and myOther#>;
}
}
</code></pre></p>
<p style="font-size: 20px;">关于ios - 对默认的 isEqual 和 hash 实现感到困惑,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/36593038/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/36593038/
</a>
</p>
页:
[1]