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 的临时文件给删除掉。

     }

     

  • 相关阅读:
    洛谷 U141580 简化罗波切问题
    洛谷 U141578 维修电路
    洛谷 U140760 狭义公因子
    CF75C Modified GCD
    算法题-求解斐波那切数列的第N个数是几?
    算法题-求N的阶乘
    JAVA8新特性
    nginx启动脚本,手动编辑
    javah生成带有包名的头文件
    Matlab图像处理(03)-基本概念
  • 原文地址:https://www.cnblogs.com/eileenleung/p/3511042.html
Copyright © 2011-2022 走看看