AFNetWorking源码学习(四)——终

442 阅读4分钟

        本篇两大内容一是来学习AFNetWorking中封装的序列化相关的两个类,网络通信信息序列化模块(AFURLRequestSerialization请求序列化,AFURLResponseSerialization响应序列化)。二是总结整个AFNetWorking,回答AFNetWorking到底做了什么这个问题?
在第一篇中利用AF走整个请求过程的时候,有涉及到序列化相关的内容,在初始化的session的时候,AFURLSessionManager初始化生成一个AFJSONResponseSerializer的实例来序列化HTTP的响应结果;而在AFHTTPSessionManager中也管理了自己的两种序列化工具,用来对请求和响应的数据做序列化。

一、AFURLRequestSerialization

先来看看提供的请求序列化AFURLRequestSerialization中都做了什么,提供了哪些序列化工具?

1、功能作用

        AFURLRequestSerialization是用来做请求序列化。其内部提供了AFJSONRequestSerializer,AFPropertyListRequestSerializer和AFHTTPRequestSerializer 三种序列化工具。

  • AFJSONRequestSerializer给参数(parameters)编码时使用的是系统自带的- [NSJSONSerialization dataWithJSONObject:options:error:]方法,Content-Type设定的是”application/json”。
  • AFPropertyListRequestSerializer给参数(parameters)编码时使用的是系统自带的- [NSPropertyListSerialization dataWithPropertyList:format:options:error:]方法,另外Content-Type设定的是”application/x-plist”。
  • AFHTTPRequestSerializer符合AFURLRequestSerialization和AFURLResponseSerialization协议,提供一个查询字符串/URL表单参数序列和默认请求报头,响应状态码和内容类型验证的基础实现。

2、属性和接口

        请求序列化相关的方法,在简述中已经有做介绍,序列化,编码到以及将编码后的参数传出去,供请求的时候使用;

二、AFURLResponseSerialization

1、功能作用

AFURLResponseSerialization是用来做响应序列化的。其内部提供了

2、属性接口

三、AFNetWorking总结

历时很久的AFNetWorking源码学习,暂时要告一段落了,在整个的学习过程中,从第一遍的初探,粗略阅读,仅仅知道怎么用。到后来的熟悉,对每一个类进行学习总结,那本文就来总结一下AFNetWorking到底做了什么,这是贯穿整个学习过程的一个问题,该有个答案了。

1、AFNetWorking是什么?

**官方简述:**AFNetworking是一个在IOS开发中使用非常多网络开源库,适用于iOS以及Mac OS X. 它构建于在(apple ios开发文档)NSURLConnection, NSOperation,以及其他熟悉的Foundation技术之上。它拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松.

也就说AFNetworking是一个网络相关的库,他的主要功能是用来做网络请求。但是又不仅仅局限于封装一套网络请求,它将网络相关的网络监控,序列化以及网络安全策略也都做了封装,提供更佳简洁的接口供我们使用。我们可以通过AFNetworking去发起http/https请求(在请求流程中内部帮我们做了安全控制以及序列化和网络状态监控),也可以利用通过AFNetworkReachabilityManager提供的接口去获取当前网络状态或者进行网络状态的监控等等等,这些前面都有介绍。

2、AFNetWorking做了什么?

要说AFNetworking做了什么,从他的模块划分中大抵可以看出他的主要功能:

  • 网络通信模块(AFURLSessionManager、AFHTTPSessionManager)
  • 网络状态监听模块(AFNetworkReachabilityManager)
  • 网络通信安全策略模块(AFSecurityPolicy)
  • 网络通信信息序列化模块(AFURLRequestSerialization,AFURLResponseSerialization)
  • iOS UIkit库的拓展(UIKit)

当然从这些来看都比较的笼统,实质上做了什么从前面对于每个模块的分析都可看出。但是当然也不仅仅局限于提供的这些业务功能,第一次阅读完AFNetworking之后,感叹大佬的代码逻辑,帮我们避免很多内容,不过还需要后续进一步探索,多学习学习。

3、AFNetWorking为什么要这么做?

我们为什么选择用AFNetworking而不是用原生的NSURLSession?

我的理解:首先AFNetworking封装了请求,封装了网络监控,封装了序列化;

  • 一是AFNetworking为我们提供了比较简洁易懂的接口;
  • 二是AFNetworking帮我们做了各种请求方式request的字段拼接。如果用NSURLSession的话,需要我们自己去做这些拼接参数的问题;
  • 三是AFNetworking内部对于一些回调的处理,AF帮我们在数据请求到,到回调给用户之间,做了各种错误的判断,保证了成功和失败的回调;
  • 。。。。。。

        感觉远不止这些,里边用的一些KVO,block回调处理,线程等等技术点都值得学习,用的最多的是blokc回调,对于回调结果的回传等等都是有很清晰的界限。

参考文章:www.jianshu.com/p/7ed7c0be1…