我创建了一个简单的测试应用程序以学习使用方法NSURLSession
。此应用程序必须从网络服务下载图像并将其显示为UITableView
。我已经编写了应用程序的第一部分,该部分从Web服务读取图像URL列表,现在,我想显示此列表。
我的疑问是:
考虑到图像列表可能是一个很长的列表,是否可以NSURLSessionDownloadTask
为每个图像创建一个?我想在cellForRowAtIndexPath
函数中创建会话并将NSURLSessions使用IndexPath
单元格的键存储在NSDictionary中(并可能依赖于NSURLCache
避免多次下载相同的图像)。
其他解决方案:
我可以看到另外三个解决方案:
使用GCD
与dispatch_async
子类化NSOperation并实质上存储NSOperation
我需要下载的任何图像的。
使用...之类的第三方库AFNetwork
,但由于它是一个学习目的的应用,我更喜欢完全使用我的代码。
如果多个NSURLSession不是一个好的解决方案,我将选择其中一个选项。
您如何看待这种方法?
NSURLSessionTask适合大量下载。与您提到的其他一些方法相比,它的优点是可以取消或暂停下载。它还可以正确实现网络操作的并发性,这比互联网上的许多猫难以相信的困难(如果您不相信我,请查看eskimo的2010年WWDC会话和示例代码。网络连接的NSOperation并非易事)。
NSURLSessionTask和朋友是专门为您要解决的问题而设计的,并且经过了很好的测试。
对于表格视图,在中启动任务,在中tableView:willDisplayCell:forRowAtIndexPath:
取消(或暂停)任务tableView:didEndDisplayingCell:forRowAtIndexPath:
。这样会将活动下载限制为当前可见的单元格。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句