菜鸟教程小白 发表于 2022-12-13 10:08:50

ios - NSDictionary (__NSDictionaryI) isMemberOfClass : isKindOfCLass: difference


                                            <p><p>我了解 isKindOfClass: 和 isMemberOfClass: 之间的区别,但我遇到了一些我不明白的事情:</p>

<pre><code>-(UIImage *)doSomething:(id)item
{

    UIImage *image;

    if (]) {
      NSDictionary *dictionary = item;
      NSData *data = ;
      image = [ initWithData:data];
    } else { // if item is UIImage
      image = item;
    }

    return image;
}
</code></pre>

<p>如果我在这种情况下使用 isKindOfClass,一切都会按预期工作。如果我使用 isMemberOfClass,稍后会出现以下崩溃,询问图像的大小:</p>

<pre><code>-: unrecognized selector sent to instance 0x123456

Terminating app due to uncaught exception &#39;NSInvalidArgumentException&#39;, reason: &#39;-: unrecognized selector sent to instance 0x123456&#39;
</code></pre>

<p>我阅读了 <a href="https://stackoverflow.com/questions/9235965/ios-distinguish-an-nsdictionary-from-an-nsmutabledictionary" rel="noreferrer noopener nofollow">this one</a> 之类的其他帖子,但找不到更接近的内容。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>是的,它们是不同的,并且它们的区别已记录在案。使用 <code>isKindOfClass:</code> 将为子类返回 YES,而 <code>isMemberOfClass:</code> 不会。由于 NSDictionary 是一个类集群(内部使用私有(private)子类),因此在使用两者时会得到不同的结果(因为实例将是私有(private)子类(在您的情况下为 <code>__NSDictionaryI</code>)。</p>

<p>当使用 <code>isMemberOfClass:</code> 时,这就是你的情况:</p>

<ol>
<li>参数<code>item</code>是一个私有(private)字典子类</li>
<li>评估 <code>isMemberOfClass:</code> 返回 NO</li>
<li>字典被分配给一个 UIImage 变量</li>
<li>返回 UIImage 变量(但它确实包含字典)</li>
<li>您尝试使用该“图像”,当系统询问图像大小时,字典不响应 <code>size</code> 并引发异常。</li>
</ol></p>
                                   
                                                <p style="font-size: 20px;">关于ios - NSDictionary (__NSDictionaryI) isMemberOfClass : isKindOfCLass: difference,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/28069707/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/28069707/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - NSDictionary (__NSDictionaryI) isMemberOfClass : isKindOfCLass: difference