NSURLSessionDataTask和NSURLSessionDownloadTask有什么不同?

在最新的苹果引入新的NSURLSession来取代NSURLConnection ,所以在这里有不同的任务,那么NSURLSessionDataTaskNSURLSessionDownloadTask什么NSURLSessionDownloadTask呢?

并在哪个场景使用NSURLSessionTaskNSURLSessionDownloadTask

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

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

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

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

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

在这里输入图像说明

文档回答这个,但是:

  • NSURLSessionDownloadTask将文件下载到磁盘,然后将结果文件保存到某处以供稍后使用。
  • NSURLSessionDataTask在内存中下载文件,由您来决定如何处理响应。

添加到上面的答案

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

  • NSURLSessionDataTask我们不能恢复它以后。

我们可以从头文件中得到它

/ * * NSURLSessionDataTask不提供NSURLSessionTask的任何附加*function,它的存在仅仅是为了提供下载和上传任务的词汇区分。 * /

 @interface NSURLSessionDataTask : NSURLSessionTask @end 

/ * * NSURLSessionUploadTask当前不提供任何额外的*functionNSURLSessionDataTask。 所有可能引用NSURLSessionDataTask的委托消息*同样适用于NSURLSessionUploadTasks。 * /

 @interface NSURLSessionUploadTask : NSURLSessionDataTask @end 

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

 @interface NSURLSessionDownloadTask : NSURLSessionTask