野火🔥

生命如野火,骄傲而顽强

AFN源码分析-开篇

开篇准备&目录分析

学AFNetWorking2.0很有必要先看业界的这个入门架构分析,本部分基本就是对该文章的二次描述。

旧版核心 --- NSURLConnection + NSOperation

AFN在2.0时代有两类网络加载方案,一套是传承下来的NSURLConnection+NSOperation方案。

其中NSURLConnection是负责网络请求,异步地加载一个NSURLRequest对象,调用 delegate进行相关的回调处理;NSOperation是抽象类,模拟单个计算单元,有状态、优先级、依赖等功能,可以取消。AFNetworking将两者结合在一起,可以从头到尾监视请求的状态,并储存请求、响应、响应数据等中间状态。

在整个设计中所有的网络请求通过一个AFNetWorking线程通过NSURLConnection发送,NSURLConnection会新启一个线程用CFSocket去做网络请求,成功后的数据会回调在AFNetWorking线程,再抛回到UI线程的。

新版新增 --- NSURLSession

NSURLSession是iOS7时代开始一个用于网络请求、上传、下载的抽象组件。

AFNetWorking中定义了一个AFURLSessionManager,以用于创建、管理基于 NSURLSessionConfiguration 对象的 NSURLSession 对象的类,也可以管理 session 的数据、下载/上传任务,实现 session 和其相关联的任务的 delegate 方法。

目录分析:

  1. UIKit文件夹:对一些系统组件的扩展,最终的应用级的东西
  2. Security:名如其意。文件夹只有一个类,主要用于关于HTTPS认证相关的工具类
  3. Reachability:文件夹只有一个类,用于网络环境检查以及相关切换、广播等
  4. Serialization:两个类,分别用于请求数据、HTTP请求header以及一些请求操作的封装、序列化操作,以及对response数据的反序列化。通过这两个类,将网络请求的in和out部分完全抽象出来,有利于进一步的定制化和扩展。
  5. NSURLConnection:根据NSURLConnection组成的网络请求封装方案
  6. NSURLSession:根据NSURLSession组成的网络请求封装方案

预计研究顺序

秉承着个人一贯的研究框架的源码顺序:先若干基础工具类--->再从调用类(一般叫manager)开始进行结构分支梳理--->manager下面具体管理的各个分支类--->具体应用层次的封装。根据上述过程,将源码研究分成几个步骤,由于NSURLConnection + NSOperation方案的研究价值更大一些,所以会先从这里入手:

  1. Security+Reachability文件夹,主要用于了解功能和熟悉API。
  2. AFHTTPRequestOperationManager,从manager入手,先了解比较泛的调用框架
  3. Serialization文件夹,基本和上面的manager结合了解大体结构和使用
  4. AFHTTPRequestOperation & AFURLConnectionOperation,方案1的核心部分,这里结合了NSURLConnection和NSOperation,基本都是具体实现和最终使用中一些不太常用的小技巧,多线程学习一块比较推荐的部分
  5. NSURLSession文件夹,该了解方案2了,这里就比较孤立了,因为准备工作都在方案1研究中完成了
  6. UIKit文件夹,了解下都有什么现成的封装,都用了哪些比较优秀个特性。

参考