0

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

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

这通常工作正常。但是我注意到,在 iOS 模拟器中,当我通过按 command-H 将我的应用程序置于后台,然后我将我的应用程序带回来时,这个条件不再有效。你知道为什么会这样吗?

我测试了如果我写这个代码是否可以工作:

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

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

4

1 回答 1

1

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

UIImage imageNamed:方法缓存图像。因此,理论上,如果您为相同的图像名称一次又一次地调用它,您将继续获得相同的指针,并且您的代码似乎可以工作。

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

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

于 2013-10-31T15:01:35.843 回答