前言
前面的文字已经分析了 AFURLSessionManager 和 AFNetworkReachabilityManager,一个是 AFN 的核心,另一个是 AFN 非常有用的工具类。
这里我们接着了解 AFURLSessionManager 中使用到的对发出请求和接收响应时进行序列化的两个模块:
- AFURLResponseSerialization
- AFURLRequestSerialization
前者是处理响应的模块,将请求返回的数据解析成对用的格式。后者主要是修改请求的头部(主要是 HTTP 请求)。
AFURLResponseSerialization 主要使用在 AFURLSessionManager 中,而 AFURLRequestSerialization 主要用于 AFHTTPSessionManager 中,因为它主要用于修改 HTTP 头部。
AFURLResponseSerialization
AFURLResponseSerialization 其实并不是一个类,它是个协议,它只有一个需要实现的方法:
遵循这个协议的同时也需要遵循 NSObject, NSSecureCoding 和 NSCopying 这三个协议,实现安全编码、拷贝以及Objective-C 对象的基本行为。
先了解下 AFURLResponseSerialization 的模型结构:
- AFHTTPResponseSerializer 是模型中所有Serializer的根类
- 所有Serializer 都需要遵循 AFURLResponseSerialization 协议
AFHTTPResponseSerializer
AFHTTPResponseSerializer 是所有响应解析的根类,因为它遵循了 AFURLResponseSerialization 协议,所以子类也要遵循。
初始化
acceptableStatusCodes 设置为从 200 到 299 之间的状态码, 因为只有这些状态码表示获得了有效的响应。
验证响应
AFHTTPResponseSerializer 最重要的方法 - [AFHTTPResponseSerializer validateResponse:data:error:]
- 先判断 acceptableContentTypes 集合里面是否包含响应类型,如果不包含进入 if
- 在 if 里面通过 AFErrorWithUnderlyingError 包装错误信息,最后设置 responseIsValid = NO
第二段代码也是差不多的实现。
实现协议
其实就是调用