【发布时间】:2014-08-27 19:51:07
【问题描述】:
在UITableViewController 中,我有自定义单元格,其中包含我使用TMCache 缓存的缩略图。所以加载单元格的基本工作流程是:
- 用模型中的数据填充单元标签
- 检查我是否缓存了缩略图
- 如果是,则从缓存中获取...
- 如果没有,请从网上下载...
我担心的是,当我在缓存中没有任何内容时,我会开始下载大量图像(即使我设置了最大并发任务数),因此当用户滚动例如 100 行时,我的 @ AFHTTPSessionManager 中的 987654324@ 数组将处理所有这些,即使用户对其中许多都不感兴趣。
所以我提出了这个解决方案:
当用户向下滚动并开始下载时,但稍后此单元格会离开屏幕,我想取消此单元格的NSURLSessionDataTask。但是......我不知道如何检查哪个单元格应该取消其任务以及更重要的问题,如果任务在 90% 完成并且我取消它(浪费数据传输)怎么办?我注意到在 Facebook 应用程序中,它们并没有取消这些任务,因为当您向上滚动时它们已加载。
我想知道这是不是一个好方法,还是我试图让一切变得过于复杂?
【问题讨论】:
-
可能的解决方案:为什么不将未完成请求的数量限制在 10 个左右。如果用户滚动浏览 10 个项目的速度比加载单个项目的速度快,那么他们可能不感兴趣。
-
如果他们快速滚动到第 100 行怎么办?您将无法从单元格 1-10 加载图像,而用户将看到空单元格 #100。
-
@sha 他们不会被困在等待单元格 1-10 加载。一旦单元格 11 变得可见,它将取消单元格 1 的加载(如果它仍然未完成)。如果您快速滚动到第 100 行,它会立即开始加载它,您可能还没有完成加载您滚动过去的任何单元格。
-
@CrimsonChris 以及如何限制
AFHTTPSessionManager以适应您的解决方案?我不知道这是否可能!
标签: ios objective-c uitableview afnetworking