NSURLSessionDataTask和NSURLSessionDownloadTask有什么区别?

36
最新的苹果引入了NSURLSession来取代NSURLConnection,所以有不同的任务。那么NSURLSessionDataTaskNSURLSessionDownloadTask之间有什么区别呢?
在哪种情况下使用NSURLSessionTask?在哪种情况下使用NSURLSessionDownloadTask
5个回答

62

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

数据任务使用NSData对象发送和接收数据。数据任务旨在用于应用程序向服务器发起短暂、常交互请求的情况。数据任务可以通过完成处理程序一次返回所有数据,也可以在每个数据块接收到后逐个地将数据分块返回给您的应用程序。由于数据任务不将数据存储到文件中,因此不支持在后台会话中使用。

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

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

我猜下面的图片可以更好地让您了解:

enter image description here


我最终选择使用NSURLSessionDownloadTask,因为它有额外的功能。 - NSPratik
因为数据任务不会将数据存储到文件中,这是什么意思?它们不会将其存储到文件中?那么它们被存储在哪里?文件形式是什么意思?我觉得这是你回答的核心,其中还有其他我不理解的先决条件。也许如果您分享一些现实世界的例子,理解会变得更容易... - mfaani
1
@Honey NSURLSessionDataTask 将其存储在内存中。 - CodeOverRide

24

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

  • NSURLSessionDownloadTask会将文件下载到磁盘上,然后您可以将结果文件保存在其他地方以便日后使用。
  • NSURLSessionDataTask会将文件下载到内存中,您需要决定如何处理响应数据。

4

对于以上的回答,还需要补充一些内容。

  • NSURLSessionDownloadTask 可以取消一个下载任务,并且在之后的某个时间继续下载。

  • NSURLSessionDataTask 不能在之后继续下载。


这只是区别吗?似乎不仅如此。例如,NSURLSessionDownloadTask会在应用程序关闭时下载文件等,而NSURLSessionDataTask则不会。 - CodeOverRide

1
我们可以从头文件中获取它。
/* NSURLSessionDataTask 不提供任何额外的功能,仅为了与下载和上传任务进行词汇区分而存在。*/
@interface NSURLSessionDataTask : NSURLSessionTask
@end

/* * NSURLSessionUploadTask目前没有额外的功能,与NSURLSessionDataTask相比并无差别。所有可能涉及到NSURLSessionDataTask的委托消息同样适用于NSURLSessionUploadTasks。 */

@interface NSURLSessionUploadTask : NSURLSessionDataTask
@end

/* NSURLSessionDownloadTask是一个任务,代表将内容下载到本地存储。*/
@interface NSURLSessionDownloadTask : NSURLSessionTask

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接