应用程序从后台移动到前台后,ImageIO_PNG_DATA继续增长

时间:2014-05-26 11:09:58

标签: ios objective-c imagenamed

我有一个应用程序,其中我使用了大量图像,但我发现应用程序内存占用的异常问题。我使用imageNamed方法初始化UIImage个对象。从我已经阅读的文档中可以看出imageNamed将内存保留在缓存中,并且不会每次都重新加载图像。这对我有用,因为我的应用程序仅基于图像,但在我的情况下,似乎每次我的应用程序从background移动到foreground时,图像都会再次加载。我觉得这是因为每当我从后台移动到前台时,每当我对应用程序进行内存分析时,消耗的内存量在VM:ImageIO_PNG_DATA中大大增加,最终我的应用程序崩溃了,因为它耗费超过600 MB。在某些地方,我读到我们应该使用imageWithContentsOfFile来避免这个问题,但我不确定这是否是正确的方法。

请指导我。

1 个答案:

答案 0 :(得分:4)

docs说:“如果您的图像文件只显示一次,并希望确保它不会添加到系统的缓存中,则应使用{{1}创建图像这将使您的一次性图像保持在系统图像缓存之外,从而可能改善应用程序的内存使用特性。“ 因此,如果您的图片未被重复使用,则应使用imageWithContentsOfFile:代替imageWithContentsOfFile:

另一点是两个方法都创建了自动释放对象。即使不再使用这些对象,只有在自动释放池耗尽时才会从内存中删除它们。如果您没有设置自己的自动释放池,则可能很少耗尽。如果使用像

这样的块设置自己的自动释放池,则可能会使用更少的内存
imageNamed: