AFNetworking作为现在iOS开发最常用的开源网络框架,其代码有很多值得我们分析学习的地方。本篇是对AFNetworking3.1.0的总体结构进行分析。
类结构
AFNetworking主要组成如图1,文章不会针对UIKit部分进行分析。
AFNetworking结构.png
- AFURLSessionManager - 创建、管理基于 NSURLSessionConfiguration 对象的 NSURLSession 对象的类,也可以管理 session 的数据、下载/上传任务,实现 session 和其相关联的任务的 delegate 方法。因为 NSURLSession API 设计中奇怪的空缺,任何和 NSURLSession 相关的代码都可以用 AFURLSessionManager 改善。
- AFHTTPSessionManager - AFURLSessionManager 的子类,包装常见的 HTTP web 服务操作,通过 AFURLSessionManager 由 NSURLSession 支持。
- AFURLRequestSerializer协议 - 符合这个协议的对象用于处理请求,它将请求参数转换为 query string 或是 entity body 的形式,并设置必要的 header。
- AFURLResponseSerializer协议 - 符合这个协议的对象用于验证、序列化响应及相关数据,转换为有用的形式,比如 JSON 对象、图像、甚至基于 Mantle 的模型对象。
- AFSecurityPolicy - 评估服务器对安全连接针对指定的固定证书或公共密钥的信任。将你的服务器证书添加到 app bundle,防止中间人攻击。
- AFNetworkReachabilityManager - 这个类监控当前网络的可达性,提供回调 block 和 notificaiton,在可达性变化时调用。
图1 AFNetworking UML类图
AFNetworking.png
图2 AFRequestSerrialization UML类图
AFRequestSerrialization.png
图3 AFResponseSerialization UML类图
AFResponseSerialization.png
优势
易用
系统的 Foundation 框架提供了一整套与网络操作网络相关的类(URL Loading System),当我们调用系统API实现网络操作的过程中,往往需要配合使用多个类和编写配置相关的代码,AFNetworking封装了这个过程中的绝大部分细节,如果项目只需要使用简单的网络操作,使用AFNetworking将非常便利。
可读性强
AFNetworking 针对URL Loading System中的绝大部分 delegate 方法都使用 block 来实现,相对于在应用中用 delegate 零散的逻辑实现, block 可以将相关的功能放在一起,使代码逻辑更紧凑,增强可读性。
网友评论