iOS开发-AFNetWorking 3.0指南

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,373评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,732评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,163评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,700评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,036评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,425评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,737评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,421评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,141评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,398评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,908评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,276评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,907评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,018评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,772评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,448评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,325评论 2 261

推荐阅读更多精彩内容