我正在iOS上进行图像缓存。图像从URL下载并作为UIImage存储在NSDictionary中(我不想或不需要“在磁盘上”缓存)。
问题是:我应该将图像存储在我的字典中作为UIImage还是NSData?哪一个在记忆方面要小得多?
答案 0 :(得分:7)
UIImage
具有自动响应低内存情况并释放其缓存表示的优化。来自UIImage reference:
在内存不足的情况下,可以从UIImage对象中清除图像数据以释放系统上的内存。此清除行为仅影响UIImage对象内部存储的图像数据,而不影响对象本身。当您尝试绘制其数据已被清除的图像时,图像对象会自动从其原始文件重新加载数据。然而,这个额外的负载步骤可能会导致很小的性能损失。
一般来说,您应该将图片数据保留在UIImage
。
如果您可以根据需要重新获取图片,则应考虑NSPurgeableData或您自己的个对象以及NSCache而不是NSDictionary
。 NSCache
存储在其中的特别好的内存可以由操作系统自动释放,即使您被暂停,也避免在后台被终止。 UIImage
已为您完成了很多此操作,但NSCache
将允许您释放所有数据而不仅仅是未压缩的数据。
答案 1 :(得分:5)
NSData较小,因为它存储图像的压缩版本。但是decompressing takes time,所以只要内存允许,如果你收到内存警告就缓存UIImage并清理缓存。