浅谈AFNetworking之《一》总览

AFNetworking框架是当下iOS网络开发中使用最广的开源框架。今天起,和大家一起从源码的角度来重新认识一下他。
AFNetworking的核心是对URLSession的封装。而URLSession正式引入iOS是从iOS7开始,用来取代URLConnection。直到iOS9,苹果完全放弃了URLConnection,全面使用URLSession.

首先我们要认识的第一个概念就是URLSession。
简单总结一下:
1、URLSession实例是线程安全的。
2、URLSession的创建是伴随着一个 NSURLSessionConfiguration 的,这个配置控制着网络凭证、缓存、cookie等等。在URLSession创建时就需要提供,创建之后再给就不起作用了
3、URLSession可以是各种URLSessionTask的管理者。
4、URLSessionTask对象默认被创建于挂起状态,当需要执行时,必须要调用resume

第二个概念是URLSessionTask
用苹果的话讲 URLSessionTask — a cancelable object that refers to the lifetime of processing a given request. 也就是 掌控了一个请求的整个处理生命周期的一个可取消的对象。所以,它的整个存在的意义,就是对请求生命周期的掌控。 这中间包含了对请求的唯一定位、优先设定、记录将要(/已经/对端期待等等)发出/收到的包以及请求的当前状态等、请求的挂起、恢复、取消。 总之一句话,掌控请求生命周期。
至于它的子类,Data/Update/Download/Stream 则是根据不通的情形所做的特定处理。

回到我们的AFNetworking.
前面也说了,其实AFNetworking做的主要的事情就是针对URLSession框架的一个封装,以便于我们业务上的使用。

结构如上:分为AFNetworking.h + URLSession + Reachability + Security + Serialization + UI
我们后面分析的模块顺序从URLSession -> Serialization -> Security -> Reachability -> UIKit
URLSession模块中核心类是AFURLSesssionManager, AFHTTPURLSesssionManager只是对它的一个包装,核心实现都在AFURLSesssionManager中。AFURLSesssionManager承接管理了所有URLSessionTask的生命周期,以及对处理结果的一个异步处理,整体分发。
Serialization模块的核心是AFURLResponseSerialization和AFURLRequestSerialization,AFURLResponseSerialization是解析处理的核心抽象类,目前AF支持JSON、XML、Plist、简单图片、混合5中解析方式。
模块安全、网络连通性类相对少,按顺序来就是
最后的UI模块,我们准备挑几个有代表性的来进行研究。