NSURLSession
来取代NSURLConnection
,所以有不同的任务。那么NSURLSessionDataTask
和NSURLSessionDownloadTask
之间有什么区别呢?在哪种情况下使用
NSURLSessionTask
?在哪种情况下使用NSURLSessionDownloadTask
?NSURLSession
来取代NSURLConnection
,所以有不同的任务。那么NSURLSessionDataTask
和NSURLSessionDownloadTask
之间有什么区别呢?NSURLSessionTask
?在哪种情况下使用NSURLSessionDownloadTask
?NSURLSessionDataTask: 数据任务使用NSData交换数据。NSURLSessionDataTask不支持后台会话。
数据任务使用NSData对象发送和接收数据。数据任务旨在用于应用程序向服务器发起短暂、常交互请求的情况。数据任务可以通过完成处理程序一次返回所有数据,也可以在每个数据块接收到后逐个地将数据分块返回给您的应用程序。由于数据任务不将数据存储到文件中,因此不支持在后台会话中使用。
NSURLSessionDownloadTask: NSURLSessionDownloadTask直接将响应数据写入临时文件。它支持在应用程序未运行时进行后台下载。
下载任务以文件形式检索数据,并支持在应用程序未运行时进行后台下载。
我猜下面的图片可以更好地让您了解:
文档已经回答了这个问题,但是:
NSURLSessionDownloadTask
会将文件下载到磁盘上,然后您可以将结果文件保存在其他地方以便日后使用。NSURLSessionDataTask
会将文件下载到内存中,您需要决定如何处理响应数据。对于以上的回答,还需要补充一些内容。
NSURLSessionDownloadTask 可以取消一个下载任务,并且在之后的某个时间继续下载。
NSURLSessionDataTask 不能在之后继续下载。
@interface NSURLSessionDataTask : NSURLSessionTask
@end
/* * NSURLSessionUploadTask目前没有额外的功能,与NSURLSessionDataTask相比并无差别。所有可能涉及到NSURLSessionDataTask的委托消息同样适用于NSURLSessionUploadTasks。 */
@interface NSURLSessionUploadTask : NSURLSessionDataTask
@end
@interface NSURLSessionDownloadTask : NSURLSessionTask
补充前面的回答:苹果在他们的指南“URL加载系统”中明确说明
对于与远程服务器的小交互,您可以使用URLSessionDataTask类将响应数据接收到内存中(而不是使用URLSessionDownloadTask类,该类直接将数据存储到文件系统中)。 数据任务非常适合调用Web服务端点之类的用途。
NSURLSessionDownloadTask
,因为它有额外的功能。 - NSPratik