我创建了一个简单的测试应用程序来学习如何使用NSURLSession.此应用程序必须从Web服务下载图像并将其显示为UITableView.我已经编写了应用程序的第一部分,它从Web服务中读取了一个图像URL列表,现在,我想显示这个列表.
我的疑问是:
鉴于图像列表可能是一个非常长的列表,是否可以NSURLSessionDownloadTask为每个图像创建一个?我想在cellForRowAtIndexPath函数中创建会话并将NSURLSessions存储在NSDictionary中作为IndexPath单元格的关键(并且可能依赖于NSURLCache避免多次下载相同的图像).
其他方案:
我可以看到另外三种解决方案:
使用GCD与dispatch_async
对NSOperation进行子类化并基本上存储NSOperation我需要下载的任何图像.
使用像第三方库AFNetwork...但由于它是一个学习目的的应用程序,我更喜欢完全使用我的代码.
如果多个NSURLSession不是一个好的解决方案,我会选择其中一个选项.
您如何看待这种方法?
NSURLSessionTask适用于大量下载.与您提到的其他一些方法相比,它的一个优点是可以取消或暂停下载.它还正确地实现了网络操作的并发性,这比互联网上的许多猫更难以让您相信(如果您不相信我,请查看eskimo的2010 WWDC会话和示例代码.网络连接的NSOperation并非无足轻重).
NSURLSessionTask和朋友专为您要解决的问题而设计,并且经过了很好的测试.
对于tableview,启动任务tableView:willDisplayCell:forRowAtIndexPath:并取消(或暂停)任务tableView:didEndDisplayingCell:forRowAtIndexPath:.这将限制活动下载到当前可见的单元格.
| 归档时间: |
|
| 查看次数: |
1716 次 |
| 最近记录: |