iOS4调用ImageNamed:仍然泄漏或导致内存问题?

显然,由于内存不足,我的应用程序在第二代iPod上崩溃。 我所做的是在用户滚动时在scrollView + pageControl内的每个视图上调用图像。 当记忆警告后,应用程序在达到特定点时崩溃。 当我收到警告时,我试图释放视图,但仍然导致崩溃。

我search了一下ImageNamed:显然在这个API调用中有问题,但是大多数文章都说它在最近的iOS版本中已经修复了。

我解决了这个问题,调用图像imageWithContentOfFile而不是imageNamed,但我想知道,如果ImageNamed仍然导致内存泄漏或不释放时,它的视图被释放。

imageNamed:不会导致泄漏,但经常被误解的是当它被使用时会导致内存问题。 它在加载之后caching未压缩的图像,这意味着在存储器中立即有2个该图像的副本。 如果将它用于小的,经常使用的图像(比如图标),这是非常棒的,因为运行时不需要从磁盘获取文件 – 它已经在caching中可用。 当用户遇到麻烦的时候,他们使用imageNamed:来加载一个大的图像,比如用相机拍摄的4MP图像。 该图像占用了相当多的内存 :400万像素,每像素4字节= 16MB的内存,TWICE。 如果您使用该方法为幻灯片,照片共享,相机应用程序或其他任何应用程序加载图像,则会快速加起来。

所以,如果这些function不适合你所需要的,使用其他的UIImage加载方法之一。 你的用户会感谢你。

注意 :这些信息来自提供UIKit渲染会话的苹果工程师(我认为是#121)。 希望我的笔记是正确的:)