iOS UIImageView和App进入后台的奇怪行为

时间:2013-10-31 14:56:22

标签: ios uiimageview uiimage

我有一个方法,在这个方法中,有这个条件:

if (self.sleepingCharacter.objectSprite.image == [UIImage imageNamed:@"sleepingRight.png"])
{....

这通常很好。但是我注意到,在iOS模拟器中,当我通过按下命令-H将我的应用程序放在后台,然后我带回我的应用程序时,这个条件不再有效。你知道为什么会这样吗?

我测试了如果我写这个代码代码是否会起作用:

if (self.sleepingCharacter.objectSprite.image)
{....

它确实有效,这意味着那里仍然有一个图像。现在我很困惑。

1 个答案:

答案 0 :(得分:1)

您正在使用==运算符来比较两个图像。这只会是两个图像实际上是同一块内存(相同的指针)。

UIImage imageNamed:方法缓存图像。所以从理论上讲,如果你一次又一次地调用相同的图像名称,你将获得相同的指针,你的代码似乎可以工作。

但是由于内存使用,图像缓存有时会被清除。清除图像后,下一次调用imageNamed:将返回一个新的图像指针,检查将失败。

您需要更好的方法来查看两张图片是否相同。一种解决方案是使用NSData将两个图像转换为UIImagePNGRepresentation个对象,然后使用NSData方法比较两个isEqual:个对象。