2

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

请指导我。

4

1 回答 1

4

文档说:“如果你有一个只显示一次的图像文件,并希望确保它不会被添加到系统的缓存中,你应该使用创建你的图像imageWithContentsOfFile:。这将使你的一次性图像远离系统图像缓存,可能会改善应用程序的内存使用特性。”
因此,如果您的图像没有被重复使用,您应该使用imageWithContentsOfFile:而不是imageNamed:.

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

@autoreleasepool {
    // Your code here
} // @autoreleasepool
于 2014-05-26T11:21:07.310 回答