AFNetWorking 框架使用笔记

最近初识大名顶顶AFNetWorking框架,用来处理iOS项目中的网络通讯相关的功能,这里主要是把我在项目中遇到的一些问题进行一下整合,也希望能够帮助其他有类似需求的人。

AFNetWorking 框架使用笔记_第1张图片
AFNetWorking Logo

AFNetWorking框架介绍

AF框架应该不需要多说,一个非常方便的网络请求库,可以轻松实现各种网络请求,比如经常使用的GET请求、POST请求,以及上传多张图片等。正如同他们的官方介绍:

Perhaps the most important feature of all, however, is the amazing community of developers who use and contribute to AFNetworking every day. AFNetworking powers some of the most popular and critically-acclaimed apps on the iPhone, iPad, and Mac.

git地址为:AFNetWorking-Git .

3.x的变化

在AFNetWorking 3.0中已经废弃了所有基于NSURLConnection API 的支持,取出了AFURLConnectionOperationAFHTTPRequestOperationAFHTTPRequestOperationManager,其他基于NSURLConnection的方法全部用NSURLSession重构。

如何使用AFNetWorking框架

  • 初始化一个AFHTTPSessionManager
// NSURLSessionConfiguration来统一配置NSURLSession,比如请求超时等等参数
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
//初始化一个AFHTTPSessionManager
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];
  • HTTP GET 与 POST 请求方法
    当创建了AFHTTPSessionManager后所有的网络请求都是通过这个manger进行,我们常用的http请求就是GETPOST,具体代码如下:
// POST 请求
[manager POST:@"https://api.netease.im/nimserver/user/create.action" parameters:parame progress:^(NSProgress * _Nonnull downloadProgress) {
        NSLog(@"请求中");
    } success:^(NSURLSessionDataTask * _Nonnull task, id responseObject) {
        [self doSomething:responseObject];
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"失败了:%@",error);
    }];
// GET请求
[manager GET:(nonnull NSString *) parameters:(nullable id) progress:^(NSProgress * _Nonnull downloadProgress) {
       // 请求中时需要处理的code
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
       // 请求成功后的返回对象
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        // 请求失败返回的错误信息
    }];

  • 对应的 parameters 参数组装也很容易,如果是POST参数直接传递一个NSDictionary对象即可,如果是GET的话直接在URL之后加参数即可。

  • 如果要修改请求头也很容易,直接使用manager对象的requestSerializer属性set方法即可,具体代码如下:

    [manager.requestSerializer setValue:appKey forHTTPHeaderField:@"AppKey"];
    [manager.requestSerializer setValue:nonce forHTTPHeaderField:@"Nonce"];
    [manager.requestSerializer setValue:curTime forHTTPHeaderField:@"CurTime"];
    [manager.requestSerializer setValue:checkSum forHTTPHeaderField:@"CheckSum"];
  • 关于返回的对象有个地方要注意,默认AF框架默认是返回NSData对象数据,需要将NSData数据转化对应数据,比如我们如果常用的是JSON的话,那么我们可以调用NSJSONSerialization来直接转化:
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil];
  • 当然,如果服务器这边都是返回JSON数据的话,我们可以直接在请求前通过responseSerializer来声明返回参数为JSON,这样的话就不需要每次接受数据的时候还进行处理,AF框架会默认帮我们转为NSDictionary字典对象,我们就可以直接使用了,具体代码:
manager.responseSerializer = [AFJSONResponseSerializer serializer];

你可能感兴趣的:(AFNetWorking 框架使用笔记)