我有一个方法,在这个方法中,有这个条件:
if (self.sleepingCharacter.objectSprite.image == [UIImage imageNamed:@"sleepingRight.png"])
{....
这通常很好。但是我注意到,在iOS模拟器中,当我通过按下命令-H将我的应用程序放在后台,然后我带回我的应用程序时,这个条件不再有效。你知道为什么会这样吗?
我测试了如果我写这个代码代码是否会起作用:
if (self.sleepingCharacter.objectSprite.image)
{....
它确实有效,这意味着那里仍然有一个图像。现在我很困惑。
答案 0 :(得分:1)
您正在使用==
运算符来比较两个图像。这只会是两个图像实际上是同一块内存(相同的指针)。
UIImage imageNamed:
方法缓存图像。所以从理论上讲,如果你一次又一次地调用相同的图像名称,你将获得相同的指针,你的代码似乎可以工作。
但是由于内存使用,图像缓存有时会被清除。清除图像后,下一次调用imageNamed:
将返回一个新的图像指针,检查将失败。
您需要更好的方法来查看两张图片是否相同。一种解决方案是使用NSData
将两个图像转换为UIImagePNGRepresentation
个对象,然后使用NSData
方法比较两个isEqual:
个对象。