AFN请求参数,响应数据的序列化过程<二>

昨天阐述了AFN数据请求及获取到数据后如何传给completionHandler的过程,今天来看下发送请求的时候NSURLRequest是如何将URL 和 parm包装到一起的

Serialize序列化

序列化的过程就是将url, parm,HTTPRequestHeaders 包装成一个请求的过程, AFN中序列化主要有两种AFURLRequestSerialization<请求>,AFURLResponseSerialization<响应>

AFN请求参数,响应数据的序列化过程<二>_第1张图片

AFHTTPSessionManager在初使化baseURL的时候就设置了requestSerializer,responseSerializer

AFN请求参数,响应数据的序列化过程<二>_第2张图片

AFHTTPRequestSerializer实现了  协议AFURLRequestSerialization中的方法,这个方法就是去 拆解传入的NSDictionary , 生成NSMutableURLRequest, 将参数setHTTPBody,将生成的NSMutableURLRequest 返回, NSURLSession根据返回的request生成加载数据的任务

AFN请求参数,响应数据的序列化过程<二>_第3张图片

序列化有三个类,AFHTTPRequestSerializer<父类>,AFJSONRequestSerializer<子类>,AFPropertyListRequestSerializer<子类>, 它们 都实现了AFURLRequestSerialization协议中的序列化方法,不同之处在于 使用Content-type来指定不同格式的请求信息

特别要指出的是AFHTTPRequestSerializer 把参数序列化的过程 city=1&version=2002,  使用AFQueryStringFromParametersWithEncoding 用的很是巧妙, 主要仔细看下AFQueryStringPair这个类,将key=value对应起来。

响应的序列化

同样的当NSURLSession获取到数据后,在代理方法中[self.mutableData appendData:data], 当整个数据获取完以后,在最后的代理方法didCompleteWithError中 将返回的NSData序列化为id 类型的responseObject,返回给completionHandler

AFN请求参数,响应数据的序列化过程<二>_第4张图片

响应的序列化有多个类,至于用哪个类来序列化获取到的NSData, 要看AFHTTPSessionManager初使化的时候设置的responseSerializer 是哪一个

你可能感兴趣的:(AFN请求参数,响应数据的序列化过程<二>)