在UITableView中延迟加载LOCAL图像

时间:2011-12-13 12:57:38

标签: objective-c xcode uitableview

我有一个表视图,可能会显示数百个图像缩略图。我遇到的问题是快速滚动时的滞后。

我已经看过很多关于延迟加载远程图像的教程,但没有看到本地图像的内容。

有没有人对如何通过加载许多图像来提高UI速度有任何建议或示例。

由于

达恩

1 个答案:

答案 0 :(得分:5)

当您拥有远程映像时,通常会安排一个需要时间才能完成的异步网络调用,这通常不会影响表视图刷新,因为网络作业是在单独的线程上完成的(除非您排队)数百个网络呼叫,这将减慢整个系统!) 当您使用本地映像时,通常直接在表视图数据源

tableView:cellForRowAtIndexPath:
方法中从文件系统加载映像,只要需要显示新单元格,该方法就会由表执行。因此,将图像存储在本地,您很想在主线程中立即加载它,这会导致滚动问题。

但是UITableView是一个UIScrollView子类,然后它响应UIScrollViewDelegate消息check this stackoverflow answer。因此,通过适当监控这些方法(例如加速/减速和拖动方法),您可以微调图像加载。这意味着虽然表格不是全速滚动,但不建议加载任何图像,但是一旦表格不滚动,或者表格正在减速或只是拖动(触摸),您可以尝试加载图像。通常,关键事件是当用户结束拖动并且滚动处于其最大速度时(对此有一个委托方法)。您应该非常好地学习和理解这些方法,因为它们允许您仔细跟踪滚动事件,并且基于它们,您可以试验并微调图像加载。

另一个建议是,从文件系统加载后,您将缓存图像(使用系统缓存或您的某些缓存;在这种情况下,请注意内存警告!)。一旦收到内存警告,您就可以释放此缓存,因为表格视图单元格已经保留了所有图像。