33

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

在哪种情况下使用NSURLSessionTask以及在哪里使用NSURLSessionDownloadTask

4

5 回答 5

60

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

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

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

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

我想下图可以为您提供更好的知识:

在此处输入图像描述

于 2013-12-16T06:59:19.283 回答
22

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

  • NSURLSessionDownloadTask将文件下载到磁盘,然后将生成的文件保存在某处以供以后使用。
  • NSURLSessionDataTask将文件下载到内存中,由您决定如何处理响应。
于 2013-12-16T06:52:39.677 回答
3

添加到上面的答案

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

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

于 2016-07-21T15:44:15.347 回答
0

我们可以从头文件中获取

/* * NSURLSessionDataTask 不提供任何额外的功能 * 超过 NSURLSessionTask 并且它的存在只是 * 提供与下载和上传任务的词汇区别。*/

@interface NSURLSessionDataTask : NSURLSessionTask
@end

/* * NSURLSessionUploadTask 目前不提供任何超越 NSURLSessionDataTask 的额外功能。所有可以发送引用 NSURLSessionDataTask 的委托消息 * 同样适用于 * NSURLSessionUploadTasks。*/

@interface NSURLSessionUploadTask : NSURLSessionDataTask
@end

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

@interface NSURLSessionDownloadTask : NSURLSessionTask
于 2016-09-18T09:47:42.697 回答
0

添加到以前的答案:Apple 在他们的指南“URL 加载系统”中明确表示

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

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

于 2020-01-15T16:01:38.263 回答