AFNetwork 3.0 源码解读  (一) 新版本的变化
2015-12-25 16:17
351 查看
最近公司没什么啥事情,想读一读AFNetwork的源码,虽然网上有很多的解读.但终归自己读一遍还是有好处的.So let’s do it。
AFNetwork 3.0目前最新的版本是3.0.4.所以本次的对AFNetwork的了解就是基于此.各位开发者在进行3.0迁移时要注意.作者说明了3.0版本最低支持版本是从iOS7 .
从3.0的时代开始.AFNetwork已经废弃对NSURLConnection的支持也就是说3.0开始一下的类已经删除
用以替代的是下面的类:
有一些的类是可以在新旧版本复用:
同时一下的类进行了修改(因为其中涉及到
作者在文档中说明如果你之前的开发是基于AFHTTPRequestOperationManager的网络请求现在你应该转到AFHTTPSessionManager下去进行.下面是新旧两个的对比
AFNetworking 2.x
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:@"http://example.com/resources.json" parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
相对于2.0的版本.3.0进行请求完成后都会返回一个NSURLSessionTask,同时在block中的AFHTTPRequestOperation也替换成NSURLSessionTask
相对与之前2.0中的NSURLConnection,NSURLConnection
共享了整个应用的会话管理(session management),
缓冲策略(cache policies,)
cookie存储(cookie storage,)
和URL 协议(URL
protocols).从3.0开始个NSURLSession对象都可以对上述属性进行独立的设置configuration,一旦一个session设置了制定的configuration就可以进行数据的请求、文件的上传/下载的操作。
在2.0版本的进行一个网络的数据请求时,你创建一个request可能不需要额外的花费就能取得远程数据。而在3.0
时。你可能为了完整的功能而付出一定的代价。
NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:URL.absoluteString parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
相比与2.0时。3.0进行网络请求时需要创建一个AFHTTPSessionManager *manager来进行网络的请求(感觉上没区,平时进行网络请求时也是使用AFHTTPOperationManager的)
注意:NSURLSession不在是基于NSOperation,所以如果你之前的代码对NSOperation
有着很重的依赖。那么你在进行3.0的迁移时可能会有许多的额外工作
还有值得注意的一点是:
任务追踪
在以前的网络请求中AFN并不能很好的对上传/下载任务进行一个很好的监听。但是从3.0开始AFNetworking使用
在保证数据响应头中包含Content-Length,使用KVO,progress能够追踪到每个任务的进度。
Additional:
UIAlertView扩展也应经从3.0开始被移除了。而且作者也没打算过对UIAlertController进行一个支持
本文是参照AFNetworking说明文档而写,其中加上了一些个人的理解和简化,有些理解可能会有偏差,请参照官方说明.
PS:本文当中如有问题可以留言指正。thank you
AFNetwork 3.0目前最新的版本是3.0.4.所以本次的对AFNetwork的了解就是基于此.各位开发者在进行3.0迁移时要注意.作者说明了3.0版本最低支持版本是从iOS7 .
从3.0的时代开始.AFNetwork已经废弃对NSURLConnection的支持也就是说3.0开始一下的类已经删除
AFURLConnectionOperation
AFHTTPRequestOperation
AFHTTPRequestOperationManager
用以替代的是下面的类:
AFURLSessionManager
AFHTTPSessionManager
有一些的类是可以在新旧版本复用:
securityPolicy
requestSerializer
responseSerializer
同时一下的类进行了修改(因为其中涉及到
NSURLConnectionApi.所以进行了修改替换成NSURLSession.)
UIImageView+AFNetworking
UIWebView+AFNetworking.h
UIButton+AFNetworking.h
作者在文档中说明如果你之前的开发是基于AFHTTPRequestOperationManager的网络请求现在你应该转到AFHTTPSessionManager下去进行.下面是新旧两个的对比
AFNetworking 2.x
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
AFNetworking 3.x
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];[manager GET:@"http://example.com/resources.json" parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
相对于2.0的版本.3.0进行请求完成后都会返回一个NSURLSessionTask,同时在block中的AFHTTPRequestOperation也替换成NSURLSessionTask
AFHTTPRequestOperation Based Code
相对与之前2.0中的NSURLConnection,NSURLConnection共享了整个应用的会话管理(session management),
缓冲策略(cache policies,)
cookie存储(cookie storage,)
和URL 协议(URL
protocols).从3.0开始个NSURLSession对象都可以对上述属性进行独立的设置configuration,一旦一个session设置了制定的configuration就可以进行数据的请求、文件的上传/下载的操作。
在2.0版本的进行一个网络的数据请求时,你创建一个request可能不需要额外的花费就能取得远程数据。而在3.0
时。你可能为了完整的功能而付出一定的代价。
AFNetworking 2.x
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];
AFNetworking
3.x
NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"];AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:URL.absoluteString parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
相比与2.0时。3.0进行网络请求时需要创建一个AFHTTPSessionManager *manager来进行网络的请求(感觉上没区,平时进行网络请求时也是使用AFHTTPOperationManager的)
注意:NSURLSession不在是基于NSOperation,所以如果你之前的代码对NSOperation
有着很重的依赖。那么你在进行3.0的迁移时可能会有许多的额外工作
还有值得注意的一点是:
任务追踪
在以前的网络请求中AFN并不能很好的对上传/下载任务进行一个很好的监听。但是从3.0开始AFNetworking使用
NSProgress来对NSURLSessionTasks进行跟踪。除了在上传/下载的任务中加入了对block的支持,AFURLSessionManager还在.h中暴露了两个获得进度的方法:
uploadProgressForTask:
downloadProgressForTask:
在保证数据响应头中包含Content-Length,使用KVO,progress能够追踪到每个任务的进度。
Additional:
UIAlertView扩展也应经从3.0开始被移除了。而且作者也没打算过对UIAlertController进行一个支持
本文是参照AFNetworking说明文档而写,其中加上了一些个人的理解和简化,有些理解可能会有偏差,请参照官方说明.
PS:本文当中如有问题可以留言指正。thank you
相关文章推荐
- u3d工作中解决问题记录
- 百度地图接口说明链接
- weblogic myeclipse小知识
- storm初识印象
- EXCEL工作表保护密码忘记,撤销保护攻略
- lo4j2 日志保存进数据库,在window下运行正常,linux运行日常保存不进数据库的原因。
- [置顶] 大型网站技术架构(二)架构模式
- [置顶] 大型网站技术架构(二)架构模式
- ioS开发中plist文件的创建与简单读取
- 【android】TabActivity实现手指左右滑动切换tab
- 大型网站技术架构(二)架构模式
- 我的第一次份实习工作-iOS实习生-公司使用过的软件
- 代码整洁之道 读书笔记
- Hadoop 相关问题
- Java中的代码块
- Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused(MongoDB启动异常)
- android平台的开源框架的思考
- 图像处理算法基础(七)---形态学边界提取
- 工作经验良言
- Ajax 进阶