存储缓存图像

时间:2010-10-29 16:44:24

标签: iphone objective-c image core-data

我正在寻找一堆(~200)缓存的80px到80px图像的最佳读取性能。所有人都需要立即访问一个大夹头(~50)。

我应该将uiimages(作为二进制数据)存储在plist中还是使用核心数据?

1 个答案:

答案 0 :(得分:4)

一些基本概念:

  • CoreData可能是获取图像数据的最糟糕方式,文档指出商店中的BLOB段会导致大量性能问题。
  • 使用文件系统构建它的内容,对随机数据块进行读/写访问。

其余的取决于你如何整理数据,所以这里有一些想法:

  • 80x80非常小,你可能在给定时间内可以容纳50个左右。
  • 您需要一种方法将图像散列为某种结构,以便您知道要获取哪些图像。我会使用核心数据在文件系统上存储图像的位置,并使用NSFetchedResultsController返回视图以提取文件名列表。
  • 在内存数据结构中使用一些来存储UIImage对象,大小为50的FIFO队列在这里工作得很好,因为它从文件系统中获取一个新图像,它会弹出最旧的图像。
  • 最后你必须知道你将要查看哪些图像并保持领先,文件系统读取速度不会超快,所以你需要将读取数据分块或保持足够远的视图避免滞后。如果您的视图显示为50,则可能需要保留100个内存,50 + 25之前和25下一个,如果您正在滚动,例如。

过早优化:

  • 如果读取性能至关重要,那么将图像存储在“页面”大小的块中是值得的,例如可以一次读入内存的5或n个图像的zip,然后拆分成相应的UIImage文件。