【发布时间】:2014-07-31 18:20:18
【问题描述】:
假设我有一个表格视图或集合视图。在单元格中,我需要加载某些内容(例如图像)。我可以从本地存储(如果它已保存在那里)或从 Internet 获取内容。无论哪种方式加载内容都需要一段时间(500 kB 图像)。
最好的方法是创建一个 NSOperation,它会在后台加载,然后在完成时调用一个委托。
但是假设用户进入表格视图/集合视图并且队列开始获取第一组内容(1-10)但随后用户快速滚动到最后(可见单元格 100-110)我应该怎么做做?开始下载操作发生在单元格出现时(cellForRowAtIndexPath),所以我需要等待所有内容下载,直到用户(现在位于 tableView 末尾)看到内容。 我尝试在每个单元格上创建一个队列并在 prepareForReuse 中取消它,但这会使应用程序崩溃。
无论如何,如果用户在 tableview 的某个部分并且内容正在下载,但尚未显示,并且进一步滚动导致下载被取消然后返回。然后他将需要重新下载图像的前半部分,这对于有限的数据计划来说并不好。
处理这种情况的最佳方法是什么?
【问题讨论】:
-
首先我肯定会为一个 tableView 做缩略图而不是 500 kB 的图像。细胞有多大? iPhone 上一个正常大小的电池,你可以获得大约 6 个电池。你为什么要强迫他们只为一屏的行加载 3 MB 的数据?加载缩略图以加快速度。如果他们要去实际的屏幕细节,只提交更大的图像(500 kB)。
-
这更多是理论上的讨论。当然,如果可能的话,我会为这样的应用程序使用缩略图。
标签: ios objective-c uitableview nsoperation