美文网首页网络
AFN的使用以及和ASI的区别

AFN的使用以及和ASI的区别

作者: 蓝心儿的蓝色之旅 | 来源:发表于2015-12-20 21:31 被阅读1083次

    一、2大管理对象

    1.AFHTTPRequestOperationManager

    * 对NSURLConnection的封装

    2.AFHTTPSessionManager

    * 对NSURLSession的封装

    二、AFHTTPRequestOperationManager的具体使用

    1.创建管理者

    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

    2.封装请求参数

    NSMutableDictionary *params = [NSMutableDictionary dictionary];

    params[@"username"] = @"哈哈哈";

    params[@"pwd"] = @"123";

    3.发送请求

    NSString *url = @"http://localhost:8080/MJServer/login";

    [mgr POST:url parameters:params

    success:^(AFHTTPRequestOperation *operation, id responseObject) {

    // 请求成功的时候调用这个block

    NSLog(@"请求成功---%@", responseObject);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    // 请求失败的时候调用调用这个block

    NSLog(@"请求失败");

    }];

    // GET请求

    [mgr GET:url parameters:params

    success:^(AFHTTPRequestOperation *operation, id responseObject) {

    // 请求成功的时候调用这个block

    NSLog(@"请求成功---%@", responseObject);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    // 请求失败的时候调用调用这个block

    NSLog(@"请求失败");

    }];

    三、对服务器返回数据的解析

    1.AFN可以自动对服务器返回的数据进行解析

    * 默认将服务器返回的数据当做JSON来解析

    2.设置对服务器返回数据的解析方式

    1> 当做是JSON来解析(默认做法)

    * mgr.responseSerializer = [AFJSONResponseSerializer serializer];

    * responseObject的类型是NSDictionary或者NSArray

    2> 当做是XML来解析

    * mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];

    * responseObject的类型是NSXMLParser

    3> 直接返回data

    * 意思是:告诉AFN不要去解析服务器返回的数据,保持原来的data即可

    * mgr.responseSerializer = [AFHTTPResponseSerializer serializer];

    3.注意

    * 服务器返回的数据一定要跟responseSerializer对得上

    1> 服务器返回的是JSON数据

    * AFJSONResponseSerializer

    * AFHTTPResponseSerializer

    2> 服务器返回的是XML数据

    * AFXMLParserResponseSerializer

    * AFHTTPResponseSerializer

    3> 服务器返回的是其他数据

    * AFHTTPResponseSerializer

    四.AFN 的使用  

    重点: 掌握 AFN 发送网络请求的方法.

    {

    AFN 是最常用的网络框架, AFN 内部封装了 NSURLConnection 和 NSURLSession

    其中:

    AFHTTPRequestOperationManager 是对 NSURLConnection 的封装;

    AFHTTPSessionManager 是对 NSURLSession 的封装.

    AFN 的使用非常简单:

    总共分为两步: 1. 创建网络请求管理者; 2. 封装请求参数; 3.发送请求.

    // 1. 创建网络请求管理者

    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

    // 2. 封装请求参数

    NSMutableDictionary *params = [NSMutableDictionary dictionary];

    params[@"username"] = @"zhangsan";

    params[@"password"] = @"zhang";

    // 3. 发送网络请求 ,AFN 中最常用的两个请求就是 GET 请求 和 POST 请求

    {

    // GET请求

    [mgr GET:url parameters:params

    success:^(AFHTTPRequestOperation *operation, id responseObject) {

    // 请求成功的时候调用这个block

    NSLog(@"请求成功---%@", responseObject);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    // 请求失败的时候调用调用这个block

    NSLog(@"请求失败");

    }];

    // POST请求

    [mgr POST:url parameters:params

    success:^(AFHTTPRequestOperation *operation, id responseObject) {

    // 请求成功的时候调用这个block

    NSLog(@"请求成功---%@", responseObject);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    // 请求失败的时候调用调用这个block

    NSLog(@"请求失败");

    }];

    }

    }

    五. AFN 数据解析  

    重点: 针对不同的网络请求,设置不同的数据解析器

    {

    <1> AFN 可以自动对服务器返回的数据进行解析,默认将服务器返回的数据当做 JSON 数据解析.

    必须按照服务器返回的数据格式,选择不同的解析器.不然,就会报错,得不到想要的数据.

    {

    // 创建网络请求管理者

    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

    // 1. 默认情况下,网络请求的管理者的解析器如下:

    // 由于返回的是 JSON 数据,所以从服务器返回的数据:responseObject 的类型是 NSDictionary 或者 NSArray

    mgr.responseSerializer = [AFJSONResponseSerializer serializer];

    // 2. 如果服务器返回的是 XML 数据,那么必须设置网络请求管理者的解析器类型如下:

    // 这时,服务器返回的数据 responseObject 的数据类型是 NSXMLParser

    mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];

    // 3. 如果服务器返回的是 data(比如:文件数据),这时需要告诉 AFN 不要去解析服务器返回的数据,保持原来的 data 数据就可以了.

    mgr.responseSerializer = [AFHTTPResponseSerializer serializer];

    }

    <2> 需要特别注意的是,服务器返回的数据一定要跟 responseSerializer 相对应.对应关系如下:

    {

    1> 服务器返回的是JSON数据

    * AFJSONResponseSerializer

    * AFHTTPResponseSerializer

    2> 服务器返回的是XML数据

    * AFXMLParserResponseSerializer

    * AFHTTPResponseSerializer

    3> 服务器返回的是其他数据

    * AFHTTPResponseSerializer

    }

    }

    六,AFN和ASI的区别

    一、底层实现

    1> AFN的底层基于OC的NSURLConnection和NSURLSession

    2> ASI的底层基于纯C语言的CFNetwork框架

    3> ASI的运行性能 高于 AFN

    二、对服务器返回的数据处理

    1> ASI没有直接提供对服务器数据处理的方式,直接返回data\string

    2> AFN提供了多种对服务器数据处理的方式

    * JSON处理

    * XML处理

    * 其他处理

    三、监听请求的过程

    1> AFN提供了success和failure两个block来监听请求的过程(只能监听成功和失败)

    * success : 请求成功后调用

    * failure : 请求失败后调用

    2> ASI提供了3套方案,每一套方案都能监听请求的完整过程

    (监听请求开始、接收到响应头信息、接受到具体数据、接受完毕、请求失败)

    * 成为代理,遵守协议,实现协议中的代理方法

    * 成为代理,不遵守协议,自定义代理方法

    * 设置block

    四、在文件下载和文件上传的使用难易度

    1> AFN

    * 不容易监听下载进度和上传进度

    * 不容易实现断点续传

    * 一般只用来下载不大的文件

    2> ASI

    * 非常容易实现下载和上传

    * 非常容易监听下载进度和上传进度

    * 非常容易实现断点续传

    * 下载或大或小的文件都行

    五、ASI提供了更多的实用功能

    1> 控制圈圈要不要在请求过程中转

    2> 可以轻松地设置请求之间的依赖:每一个请求都是一个NSOperation对象

    3> 可以统一管理所有请求(还专门提供了一个叫做ASINetworkQueue来管理所有的请求对象)

    * 暂停\恢复\取消所有的请求

    * 监听整个队列中所有请求的下载进度和上传进度

    相关文章

      网友评论

        本文标题:AFN的使用以及和ASI的区别

        本文链接:https://www.haomeiwen.com/subject/xkrmhttx.html