iOS开发-AFNetWorking 3.0指南

之前安装AFNetWorking 3.0出了一些小状况,临近回家事都比较多,英文文档在此AFNetworking-3.0-Migration-Guide。有人已经翻译过这篇文章,本文尝试自己翻译一次,如果不当,希望多多指正.

iOS开发-AFNetWorking 3.0指南_第1张图片
AFNetWorking.png

AFNetWorking 3.0是AFNetWorking最新的主要发布版,iOS和Mac OS X中令人感到兴奋的网络库。为了保持版本向前发展的可维护性,3.0中删除了所有基于被废弃的 NSURLConnection的API。如果你的项目使用到了基于 NSURLConnection的API,建议你使用基于 NSURLSession的API。
本文会介绍具体迁移的方法过程,基于AFNetWorking 2.X到3.0之间的过渡,我们将带你领略3.0新的API和功能结构设计的变化。

设备要求:iOS 7, Mac OS X 10.9, watchOS 2, tvOS 9, & Xcode 7

AFNetworking 3.0 正式支持 iOS 7+, Mac OS X 10.9+,watchOS 2+, tvOS 9, and Xcode 7。如果你想使用AFNetworking在一个较旧的SDK项目中,请通过README 检查一下兼容信息。

NSURLConnection APIs 已经移除

AFNetworking 1.0通过NSURLConnection基础的APIs, AFNetworking 2.0 提供了选择基于NSURLConnection的基础APIs, 或者使用较新的基于NSURLSession的基础APIs。AFNetworking 3.0 现在只提供基于NSURLSession的基础APIs,降低版本向前发展维护的负担,同时会支持NSURLSession未来添加的额外功能.

Xcode 7中NSURLConnectionAPI已经被正式弃用。当你使用这些API来实现网络调用时会建议你使用新的NSURLSession

AFNetworking 2.x将继续对关键bug和安全问题的修改,但是不会添加新的功能。Alamofire基金会建议所有的项目都迁移到基于NSURLSession的基础APIs之上。

删除的类

关于以下的类已经被删除:

  • AFURLConnectionOperation
  • AFHTTPRequestOperation
  • AFHTTPRequestOperationManager

改进的类

有一些类中的关键实现是通过NSURLConnection实现的,他们内部已经使用NSURLSession进行了重构.

  • UIImageView+AFNetworking
  • UIWebView+AFNetworking.h
  • UIButton+AFNetworking.h

迁移


AFHTTPRequestOperationManager基础代码

如果你之前使用AFHTTPRequestOperationManager,你需要使用AFHTTPSessionManager,两者之间复用了一部分API,主要包括:

  • securityPolicy
  • requestSerializer
  • responseSerializer

下面是一个迁移中使用AFHTTPSessionManager的简单例子,需要注意的是HTTP动词方法返回的是NSURLSessionTask而不是AFHTTPRequestOperation。成功回调的blocks中传递的是NSURLSessionTask而不是AFHTTPRequestOperation.

AFNetworking 2.x

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
   [manager GET:@http://www.jianshu.com/users/24da48b2ddb3/latest_articles" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
       NSLog(@"FlyElephant: %@", responseObject);
   } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
       NSLog(@"FlyElephant: %@", error);
   }];

AFNetworking 3.x

   AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
   [manager GET:@"http://www.jianshu.com/users/24da48b2ddb3/latest_articles" parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
       NSLog(@"FlyElephant: %@", responseObject);
   } failure:^(NSURLSessionTask *operation, NSError *error) {
       NSLog(@"FlyElephant: %@", error);
   }];

AFHTTPRequestOperation基础代码

不像NSURLConnection对象,每个共享应用的范围设置为会话管理,缓存策略,cookie存储和URL协议,NSURLSession对象可以单独配置所有选项。一旦会话通过特殊的配置初始化,它能分发任务获取数据,上传或下载文件.

通过AFNetworking 2.0使用AFHTTPRequestOperation,有可能创造一个单独的没有额外开销的的请求获取远程数据。NSURLSession
需要更多的开销,为了获得请求的数据.

现在,我们通过AFHTTPSessionManager创建对象,接下来创建任务来启动它.

AFNetworking 2.x

   NSURL *URL = [NSURL URLWithString:@"http://www.jianshu.com/users/24da48b2ddb3/latest_articles"];
   NSURLRequest *request = [NSURLRequest requestWithURL:URL];
   AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
   op.responseSerializer = [AFJSONResponseSerializer serializer];
   [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
       NSLog(@"FlyElephant: %@", responseObject);
   }failure:^(AFHTTPRequestOperation *operation, NSError *error) {
       NSLog(@"FlyElephant: %@", error);
   }];
   [[NSOperationQueue mainQueue] addOperation:op];

AFNetworking 3.x

   NSURL *URL = [NSURL URLWithString:@"http://www.jianshu.com/users/24da48b2ddb3/latest_articles"];
   AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
   [manager GET:URL.absoluteString parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
       NSLog(@"FlyElephant-JSON: %@", responseObject);
   } failure:^(NSURLSessionTask *operation, NSError *error) {
       NSLog(@"FlyElephant-Error: %@", error);
   }];

需要注意的是NSURLSession并不是建立在NSOperation之上,如果你的应用程序很大程度上依赖AFURLConnectionOperationNSOperation,会有额外的重构工作通过NSOperation基础方法来包装AFHTTPSessionManager.

进度跟踪

AFNetworking 3.0使用NSProgress来跟踪NSURLSessionTasks的进度。除了上传和下载任务中的AFURLSessionManager的便利方法和AFHTTPSessionManager的GET和POST方法,AFURLSessionManager对外提供了每个任务的进度的方法:

  • uploadProgressForTask:
  • downloadProgressForTask:

通过KVO,Using KVO, 可以跟踪每个任务的进度,展示响应头的内容长度.通过#3187查看AFNetWorking 3.0进度的额外变化.

UIKit迁移

图片下载AFImageDownloader类遵循了 AlamofireImage架构. UIButton和 UIImageView分类作为AFImageDownloader的代理,暴露了下载的引用如果用户有需要可自定义下载行为。真正的远程下载图片方法接口保持不变。 UIWebView通过共享的AFHTTPSessionManager重构了网络请求.

UIAlertView分类被移除

UIAlertView的分类在AFNetworking 3已经被废弃.目前没有计划去只是UIAlertController,这些逻辑应该是应用程序自己处理,并不是AFNetWorking库的责任来实现。

关于Example

例子中的项目支持所有可用的平台,包括 watchOS, tvOS和iOS扩展.

帮助

如果你有额外的问题关于迁移,通过GitHub提出问题获取更多关于迁移方面的清晰回答。

话外话

文中根据自己的理解进行了调整翻译,大体保持不变,难免有理解不当的地方,希望大家多多指正~by FlyElephant

你可能感兴趣的:(iOS开发-AFNetWorking 3.0指南)