AFNetworking 新版本3.0的迁移

AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持。如果项目以前使用过这些API,那么我们需要升级到基于 NSURLSession 的API的AFNetworking的版本。

首先我们先不用管新版本到底改动了什么,我们先大概的了解一番AFNetworking到底为我们做了哪些事情,能够让我们能够省去大量的气力来处理网络下载这一块的东西.

这里我们只需要简单了解一下,因为这个库很庞大,用到了很多底层的知识,如果对实现原理感兴趣的,可以看一下bang‘s blog.

get请求的实现流程

//使用代码
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    [manager GET:url parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
        //成功
        NSDictionary *obj = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        //失败
    }];

流程图

  1. 当我们调用get函数之前,我们需要创建一个AFHTTPSessionManager,在之前我们使用的一般是AFHTTPRequestOperationManager.
  2. 在调用get请求后,我们一般都不需要干什么了,因为那些繁琐复杂的网络通信都交给他去做了,他首先会调用AFNetworkReachabilityManager验证是否联网.
  3. 然后参数序列化,用于网络请求.
  4. 调用AFSecurityPolicy类,AFSecurityPolicy用于验证HTTPS请求的证书,简单来说建立连接.具体建立步骤参照博客.
  5. 连接建立完成,证书验证成功,开始请求服务器.
  6. 从服务器返回数据,解析服务器数据,将数据反序列化.
  7. 我们得到data类型的数据,可以使用JSON解析直接解析成字典使用.

在这实现过程中他还帮我们做了开线程,异步下载,检查数据是否合法,图片解压等一些繁琐的事情,所以我们才能用得这么舒心,但是我们还是有必要研究一下内部的实现,只有保持着一颗求知的心,我们才能研究的更深,得到的更多.


上面我们已经大概清楚了实现过程,那么现在我们来看看到底新版本AFNetworking做了哪些改变

1. NSURLConnection的API已废弃

AFNetworking 1.0建立在NSURLConnection的基础API之上 ,AFNetworking 2.0开始使用NSURLConnection的基础API ,以及较新基于NSURLSession的API的选项。 AFNetworking 3.0现已完全基于NSURLSession的API,这降低了维护的负担。在Xcode 7中,NSURLConnection的API已经正式被苹果弃用。虽然该API将继续运行,但将没有新功能将被添加,并且苹果已经通知所有基于网络的功能,以充分使NSURLSession向前发展。
AFNetworking 2.X将继续获得关键的隐患和安全补丁,但没有新的功能将被添加。
弃用的类
下面的类已从AFNetworking 3.0中废弃:

  • AFURLConnectionOperation
  • AFHTTPRequestOperation
  • AFHTTPRequestOperationManager

2. 修改的类

下面的类包含基于NSURLConnection的API的内部实现。他们已经被使用NSURLSession重构:

  • UIImageView+AFNetworking
  • UIWebView+AFNetworking
  • UIButton+AFNetworking

3. 迁移

AFHTTPRequestOperationManager 核心代码
如果你以前使用 AFHTTPRequestOperationManager , 你将需要迁移去使用 AFHTTPSessionManager。 以下的类在两者过渡间并没有变化:

  • securityPolicy
  • requestSerializer
  • responseSerializer

在上面说明流程的时候已经演示过最新版本的使用了,我们可以发现HTTP网络请求返回的不再是AFHTTPRequestOperation, 修改成为了NSURLSessionTask,并且成功和失败的Block块中的参数也变更为了NSURLSessionTask,而不再是AFHTTPRequestOperation。

AFHTTPRequestOperation 核心代码
与NSURLConnection对象不同,每个共享应用范围的设置如会话管理、缓存策略、Cookie存储以及URL协议等,这些NSURLSession对象都可以单独进行配置。使用特定的配置来初始化会话,它可以发送任务来获取数据,并上传或下载文件。
在AFNetworking 2.0中,使用AFHTTPRequestOperation,有可能创建一个没有额外开销的独立的网络请求来获取数据。NSURLSession则需要更多的开销,为了获得所要请求的数据。
接下来,将要通过AFHTTPSessionManager创建一个单例,并创建一个任务和启动它。
AFNetworking 2.x

NSURL *URL = [NSURL URLWithString:@""];
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.0

NSURL *URL = [NSURL URLWithString:@""];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:URL.absoluteString parameters:nil success:^(NSURLSessionTask *task, id responseObject) {
        NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionTask *operation, NSError *error) {
        NSLog(@"Error: %@", error);
}];

需要注意的是NSURLSession不是依赖于NSOperation而构建的。如果你有一个应用程序,它在很大程度上依赖于AFURLConnectionOperation的NSOperation的话,有可能需要为你的App的AFHTTPSessionManager用的NSOperation基础的方法进行重新的构造。

UIKit的迁移
图片下载已经被重构,以遵循AlamofireImage架构与新的AFImageDownloader类。这个类的图片下载职责的代理人是UIButton与UIImageView的类目,并且提供了一些方法,在必要时可以自定义。类别中,下载远程图片的实际方法没有改变。
UIWebView的类目被重构为使用AFHTTPSessionManager作为其网络请求。

UIAlertView的类目被废弃
从AFNetworking 3.0后UIAlertView的类目因过时而被废弃。并没有提供UIAlertController类目的计划,因为这是应用程序应处理的逻辑,而不是这个库。



说了那么多,其实真正用起来很简单,这里主要说的是他的改进方面,我们使用者其实用起来没那么麻烦,只是注意现在使用的是基于NSURLSession的API就可以了.

建议

在这里我建议大家都封装一个自己的网络库,这样不至于当第三方库发生重大更新的时候导致我们手忙脚乱,有大量的代码需要修改,如果我们对AFNetworking进行二次封装,使用的自己的网络下载类,改的时候只需要在类中进行修改就万事大吉了,轻松简单,还可以将我们需要的一些东西封装进去,比如HUD加载动画等,当然,github上也有一些基于AFNetworking封装好的网络库,但毕竟不如自己写的适合自己的需要,对吧.

本文一部分是参照AFNetworking说明文档而写,其中加上了一些个人的理解和说明,有些理解可能会有偏差,请参照官方说明.

时间: 2024-09-29 11:26:46

AFNetworking 新版本3.0的迁移的相关文章

AFNetworking新版本3.0的迁移

版本迁移面试官经常问的: 参考:http://www.jianshu.com/p/0ab3ffa9c5f5 AFNetworking在3.0版本中删除了基于NSURLConnection API的所有支持.如果项目以前使用过这些API,那么我们需要升级到基于NSURLSession的API的AFNetworking 的版本. 实现流程: get请求的实现: //使用代码 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

Oracle Rac 11.2.0.3迁移OCR和VOTEDISK

环境:AIX7.1+Oracle Rac 11.2.0.3 迁移描述:今天在装Oracle Rac的时候,错误的将500G的数据盘用作OCRDG了,遂后续比较麻烦,只能讲ocr和votedisk迁移到新建的OCRDG上,并把DATADG删除并格式化该盘.(OCRDG为normal 冗余) 操作如下: [email protected]:/home/grid>/oraapp/grid/gridhome/bin/ocrcheck Status of Oracle Cluster Registry i

AFNetworking 2.5.0版本的使用

http://afnetworking.com/ http://cocoadocs.org/docsets/AFNetworking/2.5.0/ 1. 下载源码并进行编译 源码地址 http://pan.baidu.com/s/1jG24w3W 2. 判断当前是否有网络,基准网址为 http://baidu.com/ 源码: 可以用来监测WWAN或者WiFi或者断网状态;) // 基准baseURL NSURL *baseURL = [NSURL URLWithString:@"http://

[.net 面向对象程序设计深入](4).NET MVC ——谈谈MVC的版本变迁及新版本6.0发展方向

[.net 面向对象程序设计深入](4).NET MVC ——谈谈MVC的版本变迁及新版本6.0发展方向 1.关于MVC 在本篇中不再详细介绍MVC的基础概念,这些东西百度要比我写的全面多了,MVC从1.0到5.0的时间也不短了,很多人只是按照范例去使用MVC的一些基础功能,并没有更加深入的了解MVC.在这一系列中,我主要介绍MVC的一些原理和使用技巧,以及MVC的发展方向. 先说说MVC,首先他是一种设计模式,如果你百度为什么GOF23种设计模式中没有MVC,答案很有意思,如下: “在他们看来

iOS AFNetworking 2.6.0框架导入报错解决方法

最近手动导入AFNetworking 2.6.0框架时发现Xcode报如下3个错误: 1. Use of undeclared identifier ‘kSecFormatUnknown‘ 2. Use of undeclared identifier ‘kSecItemPemArmour‘ 3. Implicit declaration of function ‘SecItemExport‘ is invalid in C99 查询后发现, 解决方法有如下两种: 第一种: 通过CocoaPod

从 Microsoft Dynamics CRM 4.0 服务器迁移到 Microsoft Dynamics CRM 2013 Server

不能就地升级早于 Microsoft Dynamics CRM Server 2011 的版本,比如 Microsoft Dynamics CRM 4.0 服务器.但是,可以在升级过程中使用 Microsoft Dynamics CRM Server 2011 的试用版 32 位版作为过渡步骤,将 Microsoft Dynamics CRM 4.0 部署升级为 Microsoft Dynamics CRM 2013.若要将本的 Microsoft Dynamics CRM 4.0 服务器 迁移

第三方库AFNetworking 3.1.0的简单使用

AFNetworking是一个 在iOS开发中 使用非常多网络开源库.它是一个轻量级的网络请求API类库. 适用于iOS以及Mac OS X.它构建于在(Apple iOS开发文档) NSURLConnection ,  NSOperation , 以及其他熟悉的Foundation技术之上. 下面的类已从AFNetworking 3.0中废弃: AFURLConnectionOperation AFHTTPRequestOperation AFHTTPRequestOperationManag

从 Microsoft Dynamics CRM 4.0 server迁移到 Microsoft Dynamics CRM 2013 Server

不能就地升级早于 Microsoft Dynamics CRM Server 2011 的版本号,比方 Microsoft Dynamics CRM 4.0 server.可是,能够在升级过程中使用 Microsoft Dynamics CRM Server 2011 的试用版 32 位版作为过渡步骤.将 Microsoft Dynamics CRM 4.0 部署升级为 Microsoft Dynamics CRM 2013.若要将本的 Microsoft Dynamics CRM 4.0 se

(转)SDL1.2到2.0的迁移指南

里面有些单词不好翻译所以放在开头,以备查验. BLock Image Transfer, a computer graphics operation in which two bitmap patterns are combined In computing, the Blit was a programmable bitmap graphics terminal designed by Rob Pike and Bart Locanthi Jr. of Bell Labs in 1982. S