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

REA*_*EE 1 iphone ipod objective-c ios javax.imageio

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

我用谷歌搜索了ImageNamed:显然这个api调用中存在问题,但是大多数文章都说它是在最近的iOS版本中修复的.

我通过调用image imageWithContentOfFile而不是imageNamed修复了这个问题,但我想知道ImageNamed是否仍然导致内存泄漏或者在视图发布时没有释放.

Rya*_*anR 7

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

因此,如果这些功能不符合您的需要,请使用其他一种UIImage加载方法.您的用户会感谢您.

注意:此信息来自Apple工程师,它提供了UIKit渲染会话(我认为它是#121).希望我的笔记是正确的:)