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

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

Serialize序列化

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

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

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

序列化有三个类,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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容