我正在尝试提高UITableView
上的滚动效果,该NSCachesDirectory
使用包含从网络获取的图片的单元格,但存储在[UIImage imageNamed:@"Placeholder.png"]
中。单元格具有自定义内容视图以绘制内容(图像)。
当我使用NSCachesDirectory
中的应用包中的占位符图片时,滚动性能非常快。
当我使用[UIImage imageWithContentsOfFile:cachePath]
从磁盘缓存(imageNamed:
)加载图像时,滚动性能会变差。
根据文档,imageWithContentsOfFile:
缓存图片,UIImage
没有。
使用imageWithContentsOfFile:
时如何使用{{1}}的系统缓存?
非常感谢!
答案 0 :(得分:8)
似乎可以使用NSCachesDirectory
中图像的路径作为[UIImage imageNamed:]
方法的参数。该方法接受相对路径(相对于应用程序包),例如:@"../Library/Caches/SomeCachedImage.png"
可以工作。
如果多次使用图像,UIImage会自动将图像缓存在内存中,这样可以提高在表格视图中多次使用图像时的性能。
答案 1 :(得分:3)
问题很可能是您在主运行循环中加载和解压缩图像。这将在短时间内阻止用户界面。如果在单独的线程中进行加载和解压缩,并且只在主循环中设置图像,则会获得更好的性能。 (这也是用户界面更改所必需的,在UIImageView上设置图像是
)这将需要更多的基础设施。例如,通知方案或键值观察。
答案 2 :(得分:0)
你做不到。 imageWithContentsOfFile:
将始终从文件加载图像(虽然懒惰)。您可以做的是使用NSArrays或NSDictionaries创建自己的内存缓存,具体取决于您希望如何进行查找。