两种比较UIImages的方法显示不同的结果.哪一个相信?

And*_*kha 5 iphone uiimage

我想比较两个UIImages.如果我这样比较:

if ([UIImagePNGRepresentation ( holderImage) isEqualToData:UIImagePNGRepresentation([UIImage imageNamed:@"empty_image.png"])])
            NSLog(@"empty image");
        else
            NSLog(@"not empty image");
Run Code Online (Sandbox Code Playgroud)

结果是YES,他们是平等的

如果我正在做以下事情

` if ([holderImage isEqual:[UIImage imageNamed:@"empty_image.png"]])
            NSLog(@"empty image");
        else
            NSLog(@"not empty image"); `
Run Code Online (Sandbox Code Playgroud)

结果是NO,他们不是

情况非常复杂,因为:

1)图像必须(这意味着我非常肯定)相等所以我会相信第一个,除非

2)isEqual比较总能给出其他图像的真实结果.

所以我完全糊涂了.你觉得怎么样?顺便说一句,holderImage刚从NSUserDefaults中获取.您是否认为在存储在NSUserDefaults中时可能会以某种方式进行更改以便isEqual比较现在正在进行中?

rck*_*nes 7

该isEqual方法UIImage查看对象的指针/哈希,其中isEqual方法NSData将看起来字节是相同的.

在isEqual大多数对象使用的是基于哈希.在Apple文档中,指定以不同方式NSData实现该isEqual方法.

如果两个数据对象保持相同的字节数,并且对象中相同位置的字节相同,则它们是相等的.

  • 不是不确定,但因为当两个图像都通过`imageNamed`方法加载时,返回相同的对象,因为`imageNamed`使用缓存. (2认同)