引导
AFNetWorking 基本是iOS开发中使用网络通信框架的标配,这个框架本身比较庞大,也很复杂,但是使用起来非常非常简单。
本篇文章主要从【AFN 内部逻辑处理过程】以Get请求为例,学习总结,
在「时间 & 知识 」有限内,总结的文章难免有「未全、不足 」的地方,还望各位好友指出,以提高文章质量。
目录:
- AFN GET内部逻辑处理
- AFN POST内部逻辑处理
- 总结
- 后续【AFN 框架 | 源码 学习总结】
Business logic【AFN GET 内部逻辑处理】
这是 AFNetworking 发起一个 Get 请求的流程图,大概可以分为这几个步骤,下面会逐个解读这个流程。
1. AFHTTPSessionManager 发起GET请求
这个方法是 AFN 的 Get请求 的起点,其他 Get 请求的方法也都是直接或者间接调用这个方法来发起 Get 请求。这个方法的代码量很少也很直观,就是调用其他方法生成 NSURLSessionDataTask
对象的实例,然后调用 NSURLSessionDataTask
的 resume
方法发起请求。
2. 创建 NSURLSessionDataTask
这个方法是创建 NSURLSessionDataTask
对象实例并返回这个实例。首先创建一个 NSMutableURLRequest
对象的实例,然后配置。之后是使用 NSMutableURLRequest
对象的实例创建NSURLSessionDataTask
对象实例,然后配置,可以选择性地传入各类Block
回调,用于监听网络请求的进度比如上传进度,下载进度,请求成功,请求失败。
3. 配置 NSMutableURLRequest对象
在这个方法中先使用了 url 创建了一个 NSMutableURLRequest
对象的实例,并且设置了 HTTPMethod
为 Get
方法(如果是Post方法,那么这里就是设置Post方法)然后使用KVC的方法设置了 NSMutableURLRequest
的一些属性。
|
|
先设置 HTTP header,之后格式化请求参数,设置参数的编码类型。这个是这个方法的基本操作流程。对于Get操作来说,参数是直接拼接在请求地址后面。
4. 配置 NSURLSessionDataTask对象
之后配置 NSMutableURLRequest
对象就需要配置 NSURLSessionDataTask
对象了。主要分为2个步骤,第一个步骤是创建 NSURLSessionDataTask
对象实例,第二个步骤是给NSURLSessionDataTask
对象实例设置 Delegate
。用于实时了解网络请求的过程。
AFN 的代理统一使用 AFURLSessionManagerTaskDelegate
对象来管理,使用 AFURLSessionManagerTaskDelegate
对象来接管NSURLSessionTask
网络请求过程中的回调,然后再传入 AFN
内部进行管理。
|
|
如代码所示 AFURLSessionManagerTaskDelegate
接管了NSURLSessionTaskDelegate
,NSURLSessionDataDelegate
,NSURLSessionDownloadDelegate
的各种回调,然后做内部处理。这也是第三方网络请求框架的重点,让网络请求更加易用,好用。
|
|
通过NSURLSessionTask
的taskIdentifier
标识符对delegate
进行管理,只要是用于识别该NSURLSessionTask
的代理。
设置各类回调 Block,给 NSURLSessionTask 使用 KVO 进行各种过程进度监听。
|
|
监听 NSURLSessionTask
被挂起 和 恢复的通知。
5. 网络请求开始
|
|
当 NSURLSessionTask
创建和配置完毕之后,它并不会主动执行,而是需要我们主动调用 resume
方法,NSURLSessionTask
才会开始执行。
6. 网络请求回调
AFN 里面有关 NSURLSessionDelegate
的回调方法非常的多,这里我们只说和 NSURLSessionTask
相关的部分方法和 KVO
处理来进行说明,其他的大家可以参考源码细看。
对于我们的 Get请求 来说,我们最关注的莫过于关注请求过程进度,收到响应数据和请求完成这2个回调。
KVO监听的属性值发生变化:
收到请求响应:
请求完成:
因为在配置 NSURLSessionDataTask 对象的时候我们有给 NSURLSessionTask 做了一系列配置,那么当 NSURLSessionDataTask 任务完成之后,我们需要将该 NSURLSessionDataTask 的一系列配置全部清理掉。
这个是我们的配置过程:
那么对应的清理过程是这样的,就是设置过程中做了什么,在清理过程中就需要去掉什么。
Business logic【AFN POST内部逻辑处理】
|
|
如果是 Post 请求,那么请求参数是没有拼接在 URL 上面,而是放在 body
上,这是 Post 和 Get 请求的最大区别了,其他过程和Get 请求并没有太多区别。
总结
AFN发起Get请求主要分为以下步骤:
1.创建
NSURLSessionDataTask
2.配置
NSURLSessionDataTask
3.设置
NSURLSessionDataTask的Delegate
4.调用
NSURLSessionDataTask
的resume
方法开始请求5.在
Delegate
的方法里面处理网络请求的各个过程6.清理
NSURLSessionDataTask
的配置
其实也就是使用 NSURLSessionDataTask
的步骤,AFN在这几个步骤加了一些封装,让我们的使用更简单。
期待
- 如果在阅读过程中遇到 error || new ideas,希望你能 messages 我,我会及时改正谢谢。
- 点击右上角的 喜欢 和 订阅Rss 按钮,可以收藏本仓库,并在 Demo 更新时收到邮件通知。