天天看点

NSURLSession 网络请求

1、NSURLSession

在 iOS9.0 之后,以前使用的 NSURLConnection 过期,苹果推荐使用 NSURLSession 来替换 NSURLConnection 完成网路请求相关操作。

NSURLSession 具有断点续传,后台下载等相关功能。

暂停、停止、重启网络任务,不再需要 NSOperation 封装。

请求可以使用同样的配置容器中。

不同的 session 可以使用不同的私有存储。

block 和委托可以同时起作用。

可以直接从文件系统上传下载。

NSURLSession 的使用非常简单,先根据会话对象创建一个请求 Task,然后执行该 Task 即可。

NSURLSessionTask 本身是一个抽象类,在使用的时候,通常是根据具体的需求使用它的几个子类。关系如下:

NSURLSessionDownloadTask <-- NSURLSessionTask --> NSURLSessionDataTask --> NSURLSessionUploadTask

使用 NSURLSession 发送 GET 请求的方法和 NSURLConnection 类似,整个过程如下:

1)确定请求路径(一般由公司的后台开发人员以接口文档的方式提供),GET 请求参数直接跟在 URL 后面;

2)创建请求对象(默认包含了请求头和请求方法【GET】),此步骤可以省略;

3)创建会话对象(NSURLSession);

4)根据会话对象创建请求任务(NSURLSessionDataTask);

5)执行 Task;

6)当得到服务器返回的响应后,解析数据(XML|JSON|HTTP)。

使用 NSURLSession 发送 POST 请求的方法和 NSURLConnection 类似,整个过程如下:

1)确定请求路径(一般由公司的后台开发人员以接口文档的方式提供);

2)创建可变的请求对象(因为需要修改),此步骤不可以省略;

3)修改请求方法为 POST;

4)设置请求体,把参数转换为二进制数据并设置请求体;

5)创建会话对象(NSURLSession);

6)根据会话对象创建请求任务(NSURLSessionDataTask);

7)执行 Task;

8)当得到服务器返回的响应后,解析数据(XML|JSON|HTTP)。

文件下载成功后,如果不做任何处理,下载的文件会被自动删除。

如果显示比较大的图片,NSURLSession 可以利用磁盘缓存直接下载到本地,不会造成内存占用太大。

一般从网络上下载文件,zip 压缩包会比较多。

如果是 zip 文件,下载完成后需要。

下载压缩包

解压缩(异步执行)到目标文件夹

删除压缩包

下载任务的特点可以让程序员只关心解压缩的工作。

需要有一个脚本做支持。

有些脚本有上传文件大小限制,如 PHP 最大为 2M。

不需要脚本,直接以文件的方式写入服务器。

如果文件不存在,就是新增,如果文件存在就是修改。

文件上传需要身份验证。

status code: 201 新增

status code: 204 修改

status code: 401 身份验证失败

2、NSURLSession 的设置

在开发一款应用程序的时候,通常只会访问一台服务器,如果所有的设置在 session 中统一设置一次,后续的网络访问方法,会非常简单,一次设置,全局有效。

在 URLSession 中,会使用 config 替代很多原有 request 中的附加设置。config 用于设置全局的网络会话属性,

包括:浏览器类型,Content-Type,身份验证,Cookie,超时时长,缓存策略,

主机最大连接数...。NSURLSessionConfiguration 拥有 20 个属性。熟练掌握这些属性的用处,将使应用程序充分利用其网络环境。

常用属性:

3、NSURLSession 异步 GET 数据请求

4、NSURLSession 异步 POST 数据请求

5、NSURLSession 文件下载

6、NSURLSession 文件上传

文件数据封装使用到第三方框架 QExtension,具体实现代码见 GitHub 源码 QExtension

作者: CH520

继续阅读