【发布时间】:2016-12-22 08:47:49
【问题描述】:
我需要通过以下步骤执行一个场景:
- 使用用户提供的一些搜索参数进行网络调用
- 然后,解析其 JSON 响应并创建模型实体
- 然后,对于创建的每个实体,如果它具有关联的图像 URL,则调用相应的服务来下载此类图像,并在下载完成时将其显示在
UICollectionView中。
下载我需要的 N 个图像时,我需要处理并发网络调用。用户应该可以取消当前的搜索流程并开始一个新的搜索流程。另外,我应该考虑到某个图像的单元格尚未显示或已出列。所以,我的问题是:这将是最好的方法?
- 直接使用
URLSession和URLSessionDownloadTask执行第一次网络调用(无并发)和JSON响应解析,后续步骤使用Operation和OperationQueue。如果用户想要取消当前搜索,请同时使用invalidateAndCancel()和cancelAllOperations()作为OperationQueue。 - 使用
Operation和OperationQueue执行整个过程。 - 还有其他更合适的方法吗?
【问题讨论】:
-
对于后续的网络调用,因为它们之间没有使用 NSOperationQueue 的依赖关系或优先级(在这种情况下,我能想到的主要好处是依赖关系和优先级)我相信没有任何价值。您可以启动 NSURLSession 的多个数据任务,然后在 URLSession 上调用 invalidateAndCancel 是有意义的。然而,为了下载图像并在 CollectionView 中显示它,我更喜欢使用 SDWebImage。它会进行大量缓存,下载图像并自行更新 UI,从而有效地在 collectionView/tableView 中显示图像:D
标签: ios nsurlsession nsoperation nsoperationqueue nsurlsessiondownloadtask