神刀安全网

AFNetworking(v3.1.0)框架学习总结(一框架结构)


Write in the first【写在最前】


AFNetWorking 基本是iOS开发中使用网络通信框架的标配,这个框架本身比较庞大,也很复杂,但是使用起来非常非常简单。极大地提高了开发效率,让我们更加专注于业务逻辑的实现。
像这种经常使用用又比较重要的内容,我觉得要做到 知其然亦知其所以然,然后梳理总结常用方法,到最后夯实基础、活学活用。

为此,本着好好学习,了解权威的目的,决定从 AFNetworking 框架入手学习,按功能模块一点一点剖析它的各个模块,所以写了【AFN框架学习总结】+【AFN源码学习总结】系列。

本篇文章主要从【AFN 框架结构】学习总结,
时间有限,知识并未全覆盖,有遗漏或者错误,忘指正。

AFNetworking(v3.1.0)框架学习总结(一框架结构)

 AFNetworking

目录:

  1. AFN 需求 | 版本区别
  2. AFN 内部体系结构
  3. AFN 工程目录
  4. AFN 后续【框架 | 源码 学习总结】

首先来看一下,官方介绍 AFNetworking,如下:

AFNetworking is a delightful networking library for iOS and Mac OS X. It’s built on top of the Foundation URL Loading System, extending the powerful high-level networking abstractions built into Cocoa. It has a modular architecture with well-designed, feature-rich APIs that are a joy to use.

Perhaps the most important feature of all, however, is the amazing community of developers who use and contribute to AFNetworking every day. AFNetworking powers some of the most popular and critically-acclaimed apps on the iPhone, iPad, and Mac.

Choose AFNetworking for your next project, or migrate over your existing projects—you’ll be happy you did!

翻译过来简单点说就是

AFNetworking 是一个适用于 iOS 和 Mac OS X 两个平台的网络库,它是基于 Foundation URL Loading System 上进行了一套封装,并且提供了丰富且优美的API接口给使用者使用。

Requirements【需求 | 版本区别】


AFNetworking(v3.1.0)框架学习总结(一框架结构)

AFN –> 需求 | 版本区别

  • 1.x 版本,内部底层是基于 NSURLConnection 的,是对 NSURLConnection 一次封装。

  • 在13年,苹果推出 NSURLSession 也就是会话管理者,后来 2.x AFN框架又对 NSURLSession 进行一次封装,其实在 2.0-2.6.3 AFN内部是使用两套系统,一套是基于 NSURLConnection 的,一套是基于 NSURLSession的。

  • 版本升级到3.0之后,AFN 就不在支持 NSURLConnection 了,把有关 URLConnection 的代码已全部移除。

Architecture【AFN 内部体系结构】


  • NSURLSession【管理者】
    • AFURLSessionManager
    • AFHTTPSessionManager(封装了常用的 HTTP 方法)
      • GET
      • POST
      • UIKit + AFNetworking 分类
      • NSProgress:利用KVO
  • Serialization【序列化】
    • <AFURLRequestSerialization>【请求序列化】
      • AFHTTPRequestSerializer(请求的数据格式,默认二进制)
      • AFJSONRequestSerializer
      • AFPropertyListRequestSerializer
    • <AFURLResponseSerialization>【响应者序列化】
      • AFHTTPResponseSerializer(默认二进制响应数据,解析方案)
      • AFJSONResponseSerializer(返回JSON类型,JSON解析方案.默认)
      • AFXMLParserResponseSerializer(返回XML类型,XML解析方案)
  • Additional Functionality【额外的功能】
    • AFSecurityPolicy【安全策略相关】
    • HTTPS(HTTP+SSL加密协议)
    • AFNetworkReachabilityManager【网络状态监听管理者】
  • UIKit【类库扩展与工具类】
    • UIKit+AFNetworking
  • NSURLConnection(iOS9.0废弃)
    • AFURLConnectionOperation
    • AFHTTPRequestOperation
    • AFHTTPRequestOperationManager(封装了常用的 HTTP 方法)
    • 属性
      • baseURL:AFN建议开发者针对 AFHTTPRequestOperationManager 自定义个一个单例子类,设置 baseURL, 所有的网络访问,都只使用相对路径即可
      • requestSerializer:请求数据格式/默认是二进制的 HTTP
      • responseSerializer:响应的数据格式/默认是 JSON 格式
      • operationQueue:操作队列
      • reachabilityManager:网络状态检测管理者
    • 方法
      • manager :方便创建管理器的类方法
      • HTTPRequestOperationWithRequest :在访问服务器时,如果 要告诉服务器一些附加信息,都需要在 Request 中设置
      • GET
      • POST

Directory【AFN 工程目录】


目前版本是 3.1.0,我通过 CocoaPods 导入的 AFNetworking,导入后目录如下

AFNetworking(v3.1.0)框架学习总结(一框架结构)

CocoaPods–>AFN 3.1.0工程目录

使用 CocoaPods 导入后可以看到目录很清晰主要是在五个文件夹下, 除去 Support Files,可以看到AF分为如下5个功能模块:

  • NSURLSession(网络通信模块)
  • ReachAbility(网络状态监听模块)
  • Security(网络通信安全策略模块)
  • Serialization(网络通信信息序列化/反序列化模块)
  • UIKit(UIKit库的扩展)

其核心当然是网络通信模块,其余的四个模块,均是为了配合网络通信或对已有 UIKit 的一个扩展及工具包。
这五个模块所对应的类的结构关系图如下所示:

AFNetworking(v3.1.0)框架学习总结(一框架结构)

AFN 功能模块–>关系

可以看到,AFN 的核心是 AFURLSessionManager 类,AFHTTPSessionManager 继承于 AFURLSessionManager, 针对HTTP协议传输做了特化。而 AFURLResponseSerializationAFSecurityPolicyAFNetworkReachabilityManager则被AFURLSessionManager所用。
其次,还可以看到一个单独的UIKit 包提供了对 iOS UIKit 类库的扩展与工具类。

建议:
可以学习下AFN对 UIKit 做了一些分类,对自己能力提升是非常有帮助的。

当下载好,手动导入的时候,显示两个文件夹,如下

AFNetworking(v3.1.0)框架学习总结(一框架结构)

手动导入–>AFN 3.1.0工程目录

很明显第一个文件夹里边是跟网络请求相关的,第二个是跟UI相关的。

Subsequent【后续】


这个框架有太多的东西值得我们去学习推敲,方方面面都透露着作者以及众多贡献者的智慧,我们读起来也一定会受益良多。

那么,我们的【AFN 框架 | 源码 学习总结】之路,
框架:

源码:将按照 AFN 5大功能模块,依次为

补充

1、可参考 AFNetworking 提供的 Example 学习

2、「HTTPS 相关」

期待


  • 如果在阅读过程中遇到 error,希望你能 Issues 我,谢谢。

  • 如果你想为【本文相关】分享点什么,也希望你能 Issues 我,我非常想为这篇文章增加更多实用的内容,谢谢。

  • 「博客原文」,对本文我会【不定时、持续更新、一些 学习心得与文章、实用才是硬道理】^_^.

Write in the last【写在最后】


【我也是对所花费时间的一个总结】
学习总结–> GitHub(现在代码少点,总结好 待上传)、白开水Blog白开水ln-简书
一劳永逸–>

我只是个【有思想的代码搬运工】加上【自己的学习总结】写出来的文章。
有个想法,我在GitHub创一工程「官方译文源码注解」。分享和开源精神值得俱备,大家一起干!

附上总结写的小样(Demo),
如果「你喜欢 或 有帮助」,可否点个 Star

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » AFNetworking(v3.1.0)框架学习总结(一框架结构)

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址