【问题标题】:What is difference between NSURLSessionDataTask vs NSURLSessionDownloadTaskNSURLSessionDataTask 与 NSURLSessionDownloadTask 有什么区别
【发布时间】:2014-01-03 11:44:09
【问题描述】:

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

在哪种情况下使用NSURLSessionTask,在哪里使用NSURLSessionDownloadTask

【问题讨论】:

    标签: ios objective-c nsurlsession nsurlsessiondownloadtask nsurlsessiontask


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我终于更喜欢使用NSURLSessionDownloadTask,因为我们可以用它来增加额外的功能..
    • 因为数据任务不会将数据存储到文件中这是什么意思?!他们不将其存储到文件中?!那么存储在哪里呢?文件的形式是什么意思?我觉得这是您回答的核心,还有一些我不理解的其他先决条件。也许如果你分享真实世界的例子,那么理解会变得更容易......
    • @Honey NSURLSessionDataTask 将其存储在内存中。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      添加到上面的答案

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

      • NSURLSessionDataTask我们无法稍后恢复它。

      【讨论】:

      • 只有这个区别吗?它似乎不止于此。例如,当应用关闭时,NSURLSessionDownloadTask 会下载文件等,而 NSURLSessionDataTask 不会。
      【解决方案4】:

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

      /* * NSURLSessionDataTask 不提供任何额外的 * NSURLSessionTask 上的功能,它的存在仅仅是 * 提供与下载和上传任务的词法区分。 */

      @interface NSURLSessionDataTask : NSURLSessionTask
      @end
      

      /* * 一个 NSURLSessionUploadTask 当前不提供任何 * NSURLSessionDataTask 上的附加功能。全部 委托消息 * 可以发送参考 NSURLSessionDataTask 同样适用于 * NSURLSessionUploadTasks。 */

      @interface NSURLSessionUploadTask : NSURLSessionDataTask
      @end
      

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

      @interface NSURLSessionDownloadTask : NSURLSessionTask
      

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-19
          • 2013-03-14
          • 2018-09-14
          • 2021-12-22
          • 2017-10-25
          • 2011-06-09
          • 2021-05-11
          相关资源
          最近更新 更多