何时值得缓存UIImage资源?

时间:2011-07-15 20:35:20

标签: iphone objective-c performance uiimage

我一直在使用图像文件进行大量的iPhone UI工作,这些图像文件在单个视图中的多个位置或整个应用程序的多个视图中使用。在某些情况下,我正在绘制新的图标,通常是通过合成2个小图像(每个小于4 KB)。

我已经考虑过优化图像的加载,但我不确定最佳实践是什么。我猜想保存使用CG函数创建或更改的任何图像是值得的。对于未更改的图像,从捆绑中加载图像的开销是多少?

UIImage* image = [UIImage imageNamed:@"myImage.png"]

考虑到移动设备的内存限制,在考虑缓存图像时哪些因素最重要?我想到了图像的大小,可以缓存的图像总数以及加载单个图像的次数。

1 个答案:

答案 0 :(得分:17)

在WWDC(2011)的最新演出会议中,Apple建议不要在大多数情况下缓存图像。他们建议您只有在知道事实后才能缓存图像,在性能分析之后,您需要提前缓存图像,因为您无法负担从磁盘加载它们并解码它们的时间。在大多数情况下,你可能负担得起。

他们特别指出,正如@Till所做的那样,+[UIImage imageNamed:]会在进程的生命周期内缓存图像,因此他们建议使用非缓存加载方法,例如+[UIImage imageWithContentsOfFile:]

原因是内存是iOS设备上受限制的资源,因此如果您缓存图像,则可能会对系统造成内存压力,并且应用程序会受到jetsammed的攻击。而且,由于iOS 5首先使用更多内存,因此如果您正在缓存一堆UIImages,那么您的应用程序将更有可能获得jetsammed。