如何提高UITableView的性能从文档目录加载数百个图像?

时间:2013-05-13 19:15:23

标签: ios uiimage uikit

我正在从Documents Directory加载一个图像文件列表,并将它们设置在Custom UITableViewCell中,但是,我之前的努力要么太重,要么导致UITableView滚动性能不佳。

在每种方法中,我将图像加载到容器类中,然后加载到数组中。

我尝试过:

  • UIImage+ImmediateLoad(自定义UIImage类别,它从文件路径加载图像并将其直接加载到内存中。这导致60FPS滚动,但如果用户超过100+,则会导致应用程序崩溃相册。)

  • MPMediaItem valueForProperty:MPMediaItemPropertyArtwork方法。 (但是,这会导致滚动帧速率急剧下降。我认为这不会直接将图像加载到内存中(如果我错了,请更正我)。)

  • 将文件路径传递给UITableViewCell本身,并让它加载图像。这也导致滚动速度慢,但也不会限制内存。

这些图像每张最多可达1MB。

简而言之(我知道我要求很多),我正在寻找一种方法来加载文件目录的图像,这些图像在内存上并不太难,并且滚动顺畅。

1 个答案:

答案 0 :(得分:2)

另一种策略是拥有一个有序的图像路径列表和一个匹配的可变数组。假设用户位于位置0.加载图像在阵列中说0-10。当用户滚动时总是保留最后n个图像,释放较旧的图像(将NSNull放入可变数组中),并预取下一个n。这种困难是在主动滚动期间,sinc过多的背景工作会导致滚动卡顿。然而,它通过在任何给定时间仅在内存中保留相对较小的数据集来降低内存压力。

其他想法。您可以保存UIImageViews而不仅仅是图像。而不是扔掉范围图像,将它们扔进NSCache。

如果所有其他方法都失败了,您可以执行PhotoScrollerNetwork所做的事情,并在一个大型文件中预渲染图像,然后使用mmap抓取任何给定图像的像素并快速创建CGImage。在这里,你需要权衡文件系统空间的速度。