0

我正在从文档目录加载图像文件列表并将它们设置在自定义 UITableViewCell 中,但是,我之前的努力要么内存太重,要么导致 UITableView 滚动性能不佳。

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

我试过的:

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

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

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

这些图像每个最大可达 1MB。

简而言之(我知道我要求很多),我要求一种方法来为 Documents 目录加载图像,这种方法对内存来说不太难,并且可以平滑滚动。

4

1 回答 1

2

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

其他想法。您可以保存 UIImageViews 而不仅仅是图像。与其扔出超出范围的图像,不如将它们扔到 NSCache 中。

如果所有其他方法都失败了,您可以执行 PhotoScrollerNetwork 的操作,并将图像预渲染到一个大文件中,然后使用 mmap 获取任何给定图像的像素并快速创建 CGImage。在这里,您以文件系统空间换取速度。

于 2013-05-14T12:19:35.480 回答