文章目录

前言

前面的文字已经分析了 AFURLSessionManagerAFNetworkReachabilityManager,一个是 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

第二段代码也是差不多的实现。

实现协议

其实就是调用

02-12 20:16