昨天阐述了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 是哪一个
网友评论