在学习代码过程中,每个人都有自己的一套方法论。我习惯于先从整体上去把握框架的思路,然后再去具体的读源码。在读源码的过程中也是按照数据流向来一步一步往下看。
首先看下AFNetworking里面都有什么:
这是AFNetworking.h文件,由此可以看出暴露出来的头文件,就是我们可以用的东西。
AFURLRequestSerialization.h
AFURLResponseSerialization.h
AFSecurityPolicy.h
AFNetworkReachabilityManager.h
AFURLSessionManager.h
AFHTTPSessionManager.h
我们来看一个完整请求是怎样的过程,来对应看每一个类都做了什么工作。
prepare request -> send request -> processing -> recieve response -> handle response
过程看起来很简单,要做的东西可真不少。
AFSecurityPolicy AFNetworkReachabilityManager
这两个类比较独立,功能也非常明显,分别对应网络安全和网络状态监测。
按照每个类的名称可以很容易看出,AFURLRequestSerialization
是request序列化相关的,属于prepare request
的过程。AFURLResponseSerialization
是response序列化相关的,属于handle response
的过程。这时候就需要补充请求和响应相关的知识了,要不然对这两个类的目标任务不太明确。
可以先看看这篇文章
AFURLSessionManager AFHTTPSessionManager
就属于send request -> processing -> recieve response
这个过程了,并且与Session相关。有的老鸟只知道NSURLConnection,有的小鸟只知道NSURLSession,有的鸟只知道AFNetworking。这时候就需要补充相关知识了,AFN2.x 到 AFN3.x 最大改变是什么,解决了什么问题?NSURLSession 是什么东西,怎么用的?
NSURLSession 所有的都在这里(一)
NSURLSession 所有的都在这里(二)
简单看下每一个类的API,来确定它们具体做了什么工作。
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:URL parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
}
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"这里打印请求成功要做的事");
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",error); //这里打印错误信息
}];
这是一个简单的使用AFNetworking的例子,由此可以看出AFHTTPSessionManager是我们来进行发送和接收请求的类,那就从它开始吧。
AFHTTPSessionManager:
通过查看它的API里面的方法,得知它存在的原因和意义:它是对请求方式的封装,包括:GET、POST、PUT、PATCH、DELETE。当然还要注意POST方式还有两个constructingBodyWithBlock相关方法,用于上传请求。
AFHTTPSessionManager继承于AFURLSessionManager,所以再来看看AFURLSessionManager。
AFURLSessionManager:
先不去看属性和初始化方法,直接看它提供的public方法。可以知道它是针对Task的封装,分为NSURLSessionDataTask、NSURLSessionUploadTask、NSURLSessionDownloadTask。除此之外,还有获取upload、download的NSProgress对象的方法,以及一系列set Block方法,可以看出它也是对请求过程的handle和manage。
AFURLRequestSerialization:
AFURLRequestSerialization相对来说就比较容易概括了,它主要是对请求的请求头、请求体进行set、handle,从而包装出来一个正确的、标准的request。这里面更多操作是为上传的请求体的处理。
AFURLResponseSerialization:
AFURLResponseSerialization就更好理解了,它根据acceptableContentTypes,来决定对返回结果的解析方式,包括:AFJSONResponseSerializer、AFXMLParserResponseSerializer、AFXMLDocumentResponseSerializer、AFPropertyListResponseSerializer、AFImageResponseSerializer、AFCompoundResponseSerializer。
AFSecurityPolicy 、AFNetworkReachabilityManager:
这两个东西始终贯穿整个请求过程,甚至APP整个生命周期中。网络安全管理和网络状态的监听。
最后总结:AFURLRequestSerialization包装出request;AFHTTPSessionManager和AFURLSessionManager初始化出合适的task,并对请求过程进行manage和handle;AFURLResponseSerialization是对返回数据的解析;AFSecurityPolicy是网络安全的保障;AFNetworkReachabilityManager对网络状态进行监听