我有一个应用程序,其中我使用了大量图像,但我发现应用程序内存占用的异常问题。我使用imageNamed
方法初始化UIImage
个对象。从我已经阅读的文档中可以看出imageNamed
将内存保留在缓存中,并且不会每次都重新加载图像。这对我有用,因为我的应用程序仅基于图像,但在我的情况下,似乎每次我的应用程序从background
移动到foreground
时,图像都会再次加载。我觉得这是因为每当我从后台移动到前台时,每当我对应用程序进行内存分析时,消耗的内存量在VM:ImageIO_PNG_DATA
中大大增加,最终我的应用程序崩溃了,因为它耗费超过600 MB。在某些地方,我读到我们应该使用imageWithContentsOfFile
来避免这个问题,但我不确定这是否是正确的方法。
请指导我。
答案 0 :(得分:4)
docs说:“如果您的图像文件只显示一次,并希望确保它不会添加到系统的缓存中,则应使用{{1}创建图像这将使您的一次性图像保持在系统图像缓存之外,从而可能改善应用程序的内存使用特性。“
因此,如果您的图片未被重复使用,则应使用imageWithContentsOfFile:
代替imageWithContentsOfFile:
。
另一点是两个方法都创建了自动释放对象。即使不再使用这些对象,只有在自动释放池耗尽时才会从内存中删除它们。如果您没有设置自己的自动释放池,则可能很少耗尽。如果使用像
这样的块设置自己的自动释放池,则可能会使用更少的内存imageNamed: