iOS总结-网络框架-AFNetworking源码解析(一)

AF分为5个功能模块:

  网络通信模块(AFHTTPSessionManager/AFURLSessionManager)

  网络状态监听模块(AFURLResponseSerialization)

  网络通信安全策略模块(AFSecurityPolicy)

  网络通信信息序列化/反序列模块(AFURLRequestSerialization/AFURLResponseSerialization)

  其核心当然是网络通信模块AFURLSessionManager

  iOS总结-网络框架-AFNetworking源码解析(一)_第1张图片

AFHTTPSessionManager继承于AFURLSessionManager.在初始化的时候- (instancetype)initWithBaseURL:(NSURL *)url  sessionConfiguration:(NSURLSessionConfiguration *)configuration的时候直接调用父类AFURLSessionManager的initWithSessionConfiguration的方法.

AFHTTPSessionManager的初始化

iOS总结-网络框架-AFNetworking源码解析(一)_第2张图片

接下来是AFURLSessionManager的初始化

iOS总结-网络框架-AFNetworking源码解析(一)_第3张图片

iOS总结-网络框架-AFNetworking源码解析(一)_第4张图片

NSURLSession的有关api,我之前已经总结过了,这里是加了锁

iOS总结-网络框架-AFNetworking源码解析(一)_第5张图片

至此AFURLSessionManager初始化完成了,接下来是网络请求.

举个GET请求的例子 从AFHTTPSessionManager开始

iOS总结-网络框架-AFNetworking源码解析(一)_第6张图片

iOS总结-网络框架-AFNetworking源码解析(一)_第7张图片

iOS总结-网络框架-AFNetworking源码解析(一)_第8张图片

接着在AFURLRequestSerialization里面来获取NSMutableURLRequest的请求,请求类型get,post,put等

iOS总结-网络框架-AFNetworking源码解析(一)_第9张图片

AFHTTPRequestSerializerObservedKeyPaths()这个c函数返回一数组,里面包含了NSMutableURLRequest的各种属性

iOS总结-网络框架-AFNetworking源码解析(一)_第10张图片

在AFURLRequestSerialization里面的init初始化mutableObservedChangedKeyPaths这个NSSet方法,并添加观察者利用kVO模式进行监听.

iOS总结-网络框架-AFNetworking源码解析(一)_第11张图片

KVO触发方法:

iOS总结-网络框架-AFNetworking源码解析(一)_第12张图片

接下来是将传入的parameters进行编码,并添加到request

iOS总结-网络框架-AFNetworking源码解析(一)_第13张图片

iOS总结-网络框架-AFNetworking源码解析(一)_第14张图片

其实解码里面最重要的就是AFQueryStringPairsFromKeyAndValue()方法,通过判断value的类型(array,dic,set),不断递归自己,最后返回一数组

iOS总结-网络框架-AFNetworking源码解析(一)_第15张图片

iOS总结-网络框架-AFNetworking源码解析(一)_第16张图片

其中AFQueryStringPair这个对象的实现

iOS总结-网络框架-AFNetworking源码解析(一)_第17张图片

如果GET/HEAD/DELETE,是把参数拼接到url后面的,而POST/PUT是把query拼接到http body中.

至此生成了一个request.

参考:https://www.jianshu.com/p/856f0e26279d

 

你可能感兴趣的:(第三方库分析)