zoukankan      html  css  js  c++  java
  • NSURLSession

    参考文章1, apple文档

    一、NSURLSessionConfiguration

      介绍:分别配置每一个 session 对象。(NSURLConnection 很难做到)

      分类:

        1) defaultSessionConfiguration: 默认 session 配置,类似 NSURLConnection 的标准配置,使用硬盘来存储缓存数据。

        2) backgroundSessionConfiguration: 后台session配置,与默认配置类似,不同的是会在后台开启另一个线程来处理网络数据。

          注意: 这里如果设置了超时限制的话,可能会导致一直下载失败。因为后台下载会根据设备的负载程度决定分配下载的资源。

        3) ephemeralSessionConfiguration: 临时session配置,与默认配置相比,这个配置不会将缓存、cookie等存在本地,只会存在内存里,所以当程序退出时,所有的数据都会消失。

    二、NSURLSessionTask

      介绍:使用 NSURLSessionTask 来具体执行网络请求的任务。NSURLSessionTask 支持网络请求的取消、暂停和恢复。

      分类:

        1) NSURLSessionDataTask: 处理一般的 NSData 数据对象,从服务器获取 JSON 或 XML 等,但不支持后台获取。

        2) NSURLSessionDownloadTask: 用于下载文件,支持后台下载。

        3) NSURLSessionUploadTask: 用于上传文件,支持后台上传。

    三、NSSession

      总的来说,创建一个 session,需要配置 configuration 和 task。

    四、实践总结

      在两年前我使用了 ASI 有半年时间,后来看到已经没再继续维护了,就用了 apple 原生的 NSURLConnection,而且用了适配器模式写得。所以为了兼容以前的版本,我是使用 delegate 的方式来实现回调处理的。(其实 AFNetworking 2.0 已经支持了 NSURLSession,想使用第三方框架的可以考虑。)

      

      1、断点下载

      创建 task 的时候 

      NSData* downloadedData = ...  // 上一次中断下载时候,保存的临时文件。

    httpTask = [httpSession downloadTaskWithResumeData: downloadedData];


    中断 task

     [httpTask cancelByProducingResumeData:^(NSData *resumeData) {

                // 把 resumeData 存到了一个临时文件上,以便 app 完全关闭后,也能继续断点下载。

            }];

     

     在下载完成的时候

      -(void) URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {

     记得把下载过程中用来存储 resumeData 的临时文件给删除掉。

     }

     

  • 相关阅读:
    Plug It In
    The King's Walk
    Water Testing 匹克定理
    基尔霍夫矩阵
    nginx 常用的命令
    Nginx window安装
    使用nrm管理 npm 镜像仓库
    window 安装node.js
    变量和数据类型
    同步,异步,阻塞,非阻塞
  • 原文地址:https://www.cnblogs.com/eileenleung/p/3511042.html
Copyright © 2011-2022 走看看