关闭

iOS开发AFNetworking的使用

125人阅读 评论(0) 收藏 举报

这两天研究了一下AFNetworking框架,发现非常好用,把心得和大家分享一下。

AFHTTPRequestOperationManager

整个框架的核心类(IOS7以前),可用来创建并发送请求,获得并解析返回数据,检测网络连接情况,管理RequestOperation。

使用AFHTTPRequestOperationManager完成网络操作非常简单,只需要

1.获取AFHTTPRequestOperationManager的实例。

2.给实例传入请求类型,url(string类型),网络参数。

3.在success block中处理返回的数据,或在failure block中处理error。

举一个用AFHTTPRequestOperationManager完成get请求的例子:

//创建manager实例AFHTTPRequestOperationManager *manager =         [AFHTTPRequestOperationManager manager];//给manager传入参数[manager GET:@"http://example.com/resources.json" parameters:nil       success:^(AFHTTPRequestOperation *operation, idresponseObject) {//处理返回的ObjectNSLog(@"JSON: %@", responseObject);   } failure:^(AFHTTPRequestOperation *operation, NSError *error) {//处理失败NSLog(@"Error: %@", error);  }];

如果对manager处理的网络操作有更高的要求,还可以

1.设置manger的baseURL,通过对baseURL的连接测试检测当前网络状况:

[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {switch (status) {//WWAN状态下操作case AFNetworkReachabilityStatusReachableViaWWAN:break;//WiFi状态下操作case AFNetworkReachabilityStatusReachableViaWiFi:break;//无法连接下操作case AFNetworkReachabilityStatusNotReachable:break;default:break;}}];

2.设置安全策略

manager.securityPolicy.allowInvalidCertificates = YES;

AFHTTPRequestOperationManager的作用更多是管理Operation,实际的网络请求操作由AFHTTPRequestOperation来完成,下面简要的介绍一下这个类。

AFHTTPRequestOperation

直接上代码,用该类完成get请求:

NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"];NSURLRequest *request = [NSURLRequest requestWithURL:URL];AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];op.responseSerializer = [AFJSONResponseSerializer serializer];[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {NSLog(@"JSON: %@", responseObject);} failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"Error: %@", error);}];[[NSOperationQueue mainQueue] addOperation:op];

不添加注释了,因为和苹果原生的网络操作非常相似,主要区别有两点

1.用block取代委托,好处是让代码更加紧凑易读。

2.通过设置op.responseSerializer,自动完成返回数据的解析,直接获取json格式的responseObject。

直接使用这个类处理网络操作是不明智的(复杂,难于管理)。但可以通过它了解AFHTTPRequestOperationManager内部的工作原理。

AFHTTPRequestOperationManager传入的参数是URL 和 parameters,AFHTTPRequestOperation传入的参数是Request。他们之间是如何协同的?

通过AFHTTPRequestSerializer。

RequestSerializer && ResponseSerializer

使用AFHTTPRequestOperationManager处理网络操作时,不需要直接调用这两种类的实例方法,只要设置manager.requestSerializer和manager.responseSerializer为需要的实例即可。不过可以通过代码看一下他们是如何工作的。

1.RequestSerializer

[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters];

RequestSerializer把AFHTTPRequestOperationManager传入的参数序列化 形成格式为:POST http://example.com/Content-Type: application/x-www-form-urlencoded foo=bar&baz[]=1&baz[]=2&baz[]=3 的Request。这样manager中的op就可以继续工作了。

2.ResponseSerializer

目前并没有开放的ResponseSerializer解析代码。manager会根据manager.responseSerializer的类型自动解析responseOBJ。貌似默认解析JSON(不确定)。

一些实用的Category

AFNetworking还写了一些网络操作可能会用到控件的类别,扩展了他们的功能包括:

UIActivityIndicatorView(AFNetworking)

UIAlertView(AFNetworking)

UIButton(AFNetworking)

UIImageView(AFNetworking)

UIProgressView(AFNetworking)

UIRefreshControl(AFNetworking)

UIWebView(AFNetworking)

用UIWebView(AFNetworking)举个例子吧:

- (void)loadRequest:(NSURLRequest *)request progress:(void ( ^ ) ( NSUInteger bytesWritten , NSInteger totalBytesWritten , NSInteger totalBytesExpectedToWrite ))progress success:(NSString *( ^ ) ( NSHTTPURLResponse *response , NSString *HTML ))success failure:(void ( ^ ) ( NSError *error ))failure

block progress,success,failure 处理了UIWebView请求后的所有事件,尤其是progress,直接用苹果的webview想检测请求的进度是很麻烦的,这个很简单。其他的类别就不一一介绍了,都挺好的。

whats new

2.0更新最重要的内容是推出了全面支持IOS7新特性NSURLSession的AFHTTPSessionManager。要掌握AFHTTPSessionManager,首先要全面了解NSURLSession,比如它的工作原理,苹果为何力推NSURLSession取代NSURLConnection。

IOS7中AFHTTPSessionManager会逐渐取代AFHTTPRequestOperationManager。这一块儿我正在研究ing,推荐文章:忘记NSURLConnection,拥抱NSURLSession吧!

http://www.objc.io/issue-5/from-nsurlconnection-to-nsurlsession.html

其实这一块儿可以单独share一次,因为真的很深奥(看不懂)!

0
0
查看评论

iOS项目开发实战——使用AFNetworking进行Http Get请求

只要是做开发,就一定会接触到网络请求。AFNetworking是目前为止,iOS开源代码中排名第一的库,从来没有停止过更。提供的人性化API可以为我们做网络相关开发节省很多时间。我先来使用AFNetworking来进行Http Get请求。 (1)新建一个iOS项目,语言选择OC,然后导入AFNet...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2015-09-16 21:20
  • 4594

iOS开发AFNetworking的再次封装

.h /**  *  网络请求类型  */ typedef NS_ENUM(NSUInteger,HttpRequestType) {     /**      *  get...
  • taotaogoing
  • taotaogoing
  • 2016-10-26 22:43
  • 317

AFNetWorking是如何进行数据缓存的--之AFImageCache & NSURLCache 详解

如果你是一个正在使用由Matt Thompson开发的网络库 AFNetWorking(如果你还没有使用,那你还在等什么?)的iOS开发者,也许你一直很好奇和困惑它的缓存机制,并且想要了解如何更好地充分利用它? AFNetworking实际上利用了两套单独的缓存机制: AFIma...
  • xiaobo0134
  • xiaobo0134
  • 2016-11-01 10:52
  • 273

iOS AFNetworking 数据缓存

How Does Caching Work in AFNetworking? : AFImageCache & NSUrlCache Explained FEB 20TH, 2014 If you are an iOS developer using  M...
  • CloudyBird
  • CloudyBird
  • 2015-11-26 21:07
  • 995

HTTPS接口加密和身份认证 使用AFNetworking进行双向认证

使用AFNetworking进行双向认证 1.1 1)在项目中导入证书sever.cer和AFNetworking框架: 2)然后到AFSecurityPolicy.m中重写+ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinnin...
  • applexiaozhu
  • applexiaozhu
  • 2016-07-05 14:37
  • 1810

ios AFNetworking支持https请求

ios 9 出来以后,苹果推荐使用https协议,来提高数据传输之间的安全性,下面将介绍,如何在工程里面配置,让AFNetworki支持https请求. 一.证书准备 1.证书转换 在服务器人员,给你发送的crt证书后,进到证书路径,执行下面语句 // openssl x509 -in 你的证书...
  • ckl520csdn
  • ckl520csdn
  • 2016-09-29 09:54
  • 7148

iOS之AFNetworking基本使用

AFNetworking是一个在iOS开发中,使用非常多的一个开源库 适用于iOS以及Mac OS X, 它构建于在(Apple iOS开发文档)NSURLConnection, NSOperation,以及其他熟悉的Foundation技术之上 官方链接 http://cocoadocs.org/...
  • u010390827
  • u010390827
  • 2016-05-05 09:33
  • 2813

iOS开发对AFNetworking3.0的二次封装

iOS开发对AFNetworking3.0的二次封装
  • l2i2j2
  • l2i2j2
  • 2016-04-22 22:26
  • 4909

iOS开发AFNetworking的使用

AFHTTPRequestOperationManager 整个框架的核心类(IOS7以前),可用来创建并发送请求,获得并解析返回数据,检测网络连接情况,管理RequestOperation。 使用AFHTTPRequestOperationManager完成网络操作非常简单,只需要 ...
  • ridxmc
  • ridxmc
  • 2016-05-06 16:58
  • 217

iOS 开发 AFNetworking实现网络状态的实时监测

- (void)viewDidLoad { [super viewDidLoad]; [self checkNetworkStatus]; }#pragma mark - 实时监测网络状态的变化 - (void)checkNetworkStatus { UIAlertView ...
  • kuangdacaikuang
  • kuangdacaikuang
  • 2016-12-04 19:40
  • 981
    个人资料
    • 访问:152728次
    • 积分:2002
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:282篇
    • 译文:0篇
    • 评论:9条
    最新评论