最近初识大名顶顶 AFNetWorking 框架,用来处理 iOS 项目中的网络通讯相关的功能,这里主要是把我在项目中遇到的一些问题进行一下整合,也希望能够帮助其他有类似需求的人。
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 的支持,取出了AFURLConnectionOperation、AFHTTPRequestOperation和AFHTTPRequestOperationManager,其他基于 NSURLConnection 的方法全部用 NSURLSession 重构。
如何使用 AFNetWorking 框架
- 初始化一个 AFHTTPSessionManager
1 | // NSURLSessionConfiguration来统一配置NSURLSession,比如请求超时等等参数 |
- HTTP GET 与 POST 请求方法当创建了 AFHTTPSessionManager 后所有的网络请求都是通过这个 manger 进行,我们常用的 http 请求就是GET与POST,具体代码如下:
1 | // POST 请求 |
1 | // GET请求 |
对应的 parameters 参数组装也很容易,如果是 POST 参数直接传递一个 NSDictionary 对象即可,如果是 GET 的话直接在 URL 之后加参数即可。
如果要修改请求头也很容易,直接使用 manager 对象的 requestSerializer 属性 set 方法即可,具体代码如下:
1 | [manager.requestSerializer setValue:appKey forHTTPHeaderField:@"AppKey"]; |
- 关于返回的对象有个地方要注意,默认 AF 框架默认是返回 NSData 对象数据,需要将 NSData 数据转化对应数据,比如我们如果常用的是 JSON 的话,那么我们可以调用 NSJSONSerialization 来直接转化:
1 | NSDictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil]; |
- 当然,如果服务器这边都是返回 JSON 数据的话,我们可以直接在请求前通过 responseSerializer 来声明返回参数为 JSON,这样的话就不需要每次接受数据的时候还进行处理,AF 框架会默认帮我们转为 NSDictionary 字典对象,我们就可以直接使用了,具体代码:
1 | manager.responseSerializer = [AFJSONResponseSerializer serializer]; |