NSURLSessionDataTask与NSURLSessionDownloadTask有什么区别

时间:2013-12-16 06:42:05

标签: ios objective-c nsurlsession nsurlsessiondownloadtask nsurlsessiontask

在最新的苹果中引入了新的NSURLSession替换NSURLConnection,因此有不同的任务,那么NSURLSessionDataTaskNSURLSessionDownloadTask之间有什么区别?

在哪种情况下使用NSURLSessionTaskNSURLSessionDownloadTask

5 个答案:

答案 0 :(得分:46)

NSURLSessionDataTask : 数据任务使用NSData交换数据。后台会话不支持NSURLSessionDataTask。

数据任务使用NSData对象发送和接收数据。数据任务旨在用于从应用程序到服务器的简短,通常是交互式请求。数据任务可以在收到每个数据后一次一个地将数据返回给您的应用程序,或者通过完成处理程序一次性返回数据。由于数据任务不会将数据存储到文件中,因此后台会话不支持它们。

NSURLSessionDownloadTask : NSURLSessionDownloadTask直接将响应数据写入临时文件。它在应用程序未运行时支持后台下载。

下载任务以文件的形式检索数据,并在应用未运行时支持后台下载。

我想下面的图片会给你更好的知识:

enter image description here

答案 1 :(得分:17)

文档回答了这个问题,但是:

  • NSURLSessionDownloadTask将文件下载到磁盘,然后将生成的文件保存到某个地方以供日后使用。
  • NSURLSessionDataTask会在内存中下载文件,由您决定如何处理响应。

答案 2 :(得分:3)

添加到上面的答案

  • NSURLSessionDownloadTask 可以取消下载任务并在以后恢复。

  • NSURLSessionDataTask 我们暂时无法恢复。

答案 3 :(得分:0)

添加到以前的答案:苹果在其指南“ URL加载系统”中明确指出了

对于与远程服务器的小型交互,可以使用URLSessionDataTask类将响应数据接收到内存中(与使用URLSessionDownloadTask类不同,后者将数据直接存储到文件系统中)。数据任务非常适合调用Web服务端点之类的用途。

https://developer.apple.com/documentation/foundation/url_loading_system/fetching_website_data_into_memory#overview

答案 4 :(得分:-1)

我们可以从头文件中获取它

  

/ * * NSURLSessionDataTask不提供任何其他*   NSURLSessionTask上的功能及其存在仅仅是*   提供下载和上传任务的词汇区别。 * /

@interface NSURLSessionDataTask : NSURLSessionTask
@end
  

/ * * NSURLSessionUploadTask当前不提供任何内容   NSURLSessionDataTask上的其他*功能。所有   委托可以发送引用的消息*   NSURLSessionDataTask同样适用于NSURLSessionUploadTasks。 * /

@interface NSURLSessionUploadTask : NSURLSessionDataTask
@end
  

/ * * NSURLSessionDownloadTask是一个代表下载的任务   *本地存储。 * /

@interface NSURLSessionDownloadTask : NSURLSessionTask