毫不夸张的说,100%的iOS开发者都知道这个库.
有时候会有去读大牛源码的冲动,但是对于一个新手来说,直接上手去读,看了一天,你会发现,这特么乱七八糟写的什么,老子看不懂!很负责的告诉你这很正常.因为作为一个很牛逼的库,不是随随便便能让人看懂的.
但是,要知道它之所以牛逼,是因为它融合了很多iOS技术,并且做了很多权衡适配.所以,要想了解这个庞然大物,你要了解庞然大物是什么构成的.
这里,我们要做的就是站在前人的肩膀上眺望世界.
你最最最先明确的是AFN其实就是做<b>http/https</b>请求的.第一了解是http/https.(AFN默认做单向验证,想做双向验证,要自己实现里面的一个block属性)
http是什么
https是什么
https单双向验证图解
https单双项验证详解
证书自制iOS做http请求从iOS7.0开始推出 NSURLSession ,而AFN也从NSURLConnection 过渡到了 NSURLSession,所以第二先大致了解NSURLSession有关的代理方法都有什么用.
以上了解的差不多了,至少你已经知道AFN的终极目的是什么了.在实现目标除了有构图,还有好多细节.
在AFNetworking2.x中有一个常驻线程用来代理回调,不管哪个版本都有线程之间的切换,其中涉及到的
NSThread知识
NSOperation知识
GCD知识
RunLoop知识
锁🔐在3.x中_AFURLSessionTaskSwizzling为了适配NSURLSessionTask在iOS7和iOS8中的不同,用到了
runtime的知识.
Method Swizzling在序列化中也涉及到递归算法
为了适配各种平台或版本用到了预编译指令
知道了上面的知识你才马马虎虎有研究AFN的资本了.
3.x中主要涉及到
- AFHTTPSessionManager
- AFURLSessionManager
- AFNetworkReachabilityManager
- AFSecurityPolicy
- AFURLRequestSerialization
- AFURLResponseSerialization
如果AFN是个不法团伙组织的话!那么他们分工大致是这样的.
<b>AFURLSessionManager</b>是幕后老板,NSURLSession中用到的所有代理方法都经他处理.这家伙还有两个女秘书
<b>AFURLSessionManagerTaskDelegate</b>
和<b>_AFURLSessionTaskSwizzling</b>
<b>AFHTTPSessionManager</b>是老板的代言人,所以我们做请求一直接触的就是他.
<b>AFNetworkReachabilityManager</b>是侦查员:负责监管网络环境.
<b> AFSecurityPolicy</b>是安全员:主要负责https安全验证工作
<b> AFURLRequestSerialization</b>是预备队长,发起请求前,要把http需要的请求头,请求参数等等准备工作搞定.
<b> AFURLResponseSerialization</b>是善后队长,负责请求结果的处理,json,xml,image等不同的情况分给不同的小喽啰去做.
至于他们如何精确的运作,请自行小心探索!