使用从磁盘缓存(NSCachesDirectory)加载的图像的UIImage对象的系统缓存?

时间:2010-02-21 16:38:39

标签: iphone caching uiimage

我正在尝试提高UITableView上的滚动效果,该NSCachesDirectory使用包含从网络获取的图片的单元格,但存储在[UIImage imageNamed:@"Placeholder.png"]中。单元格具有自定义内容视图以绘制内容(图像)。

当我使用NSCachesDirectory中的应用包中的占位符图片时,滚动性能非常快。

当我使用[UIImage imageWithContentsOfFile:cachePath]从磁盘缓存(imageNamed:)加载图像时,滚动性能会变差。

根据文档,imageWithContentsOfFile:缓存图片,UIImage没有。

使用imageWithContentsOfFile:时如何使用{{1}}的系统缓存?

非常感谢!

3 个答案:

答案 0 :(得分:8)

似乎可以使用NSCachesDirectory中图像的路径作为[UIImage imageNamed:]方法的参数。该方法接受相对路径(相对于应用程序包),例如:@"../Library/Caches/SomeCachedImage.png"可以工作。

如果多次使用图像,UIImage会自动将图像缓存在内存中,这样可以提高在表格视图中多次使用图像时的性能。

答案 1 :(得分:3)

问题很可能是您在主运行循环中加载和解压缩图像。这将在短时间内阻止用户界面。如果在单独的线程中进行加载和解压缩,并且只在主循环中设置图像,则会获得更好的性能。 (这也是用户界面更改所必需的,在UIImageView上设置图像是

这将需要更多的基础设施。例如,通知方案或键值观察。

答案 2 :(得分:0)

你做不到。 imageWithContentsOfFile:将始终从文件加载图像(虽然懒惰)。您可以做的是使用NSArrays或NSDictionaries创建自己的内存缓存,具体取决于您希望如何进行查找。