菜鸟教程小白 发表于 2022-12-12 19:22:29

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 &lt;#comparison expression#&gt;;
    }
}

- (NSUInteger)hash
{
    return &lt;#hash expression#&gt;;
}
</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 &lt;#compare between self and myOther#&gt;;
    }
}
</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]
查看完整版本: ios - 对默认的 isEqual 和 hash 实现感到困惑