码迷,mamicode.com
首页 > 移动开发 > 详细

ios AFNetworking 3.0 原码阅读分析 (一)(AFURLRequestSerialization)

时间:2016-07-16 00:01:24      阅读:688      评论:0      收藏:0      [点我收藏+]

标签:

  本文主要内容是讲AFNetworking中的AFURLRequestSerialization。它主要的作用是在我们要发送一个网络请求的时候帮助我们创NSMutableURLRequest并封装好所需要的参数到NSMutableURLRequest中。那它内部做了些什么,提供了什么功能,使得我们进行网络请求时候变得如此方便、简单。好像我们什么都不用管就能建立一个正确的请求体NSURLRequest。接下来就会一步步揭开它神秘的面纱。


  概览  

  首先看一下在AFURLRequestSerialization.h和AFURLRequestSerialization.m中所包含的类及它们间的关系,及各部分的功能。

技术分享

AFURLRequestSerialization协议:定义了一个如下方法,各子类会根据自己需要有自己的实现

- (nullable NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request
                               withParameters:(nullable id)parameters
                                        error:(NSError * _Nullable __autoreleasing *)error

下面写个伪代码说明AFHTTPRequestSerializer、AFJSONRequestSerializer、AFPropertyListRequestSerializer功能(这个很重要!!!)。

    if (请求方式为:get || head || delete)
    {
        AFHTTPRequestSerializer、AFHTTPRequestSerializer、AFHTTPRequestSerializer
     其实都调到了AFHTTPRequestSerializer的
- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request withParameters:(id)parameters error:(NSError *__autoreleasing *)error
然后把parameters拼结成URL参数加到URL后面作为请求的一部分。 }
else if (表单提交) { AFHTTPRequestSerializer、AFHTTPRequestSerializer、AFHTTPRequestSerializer就会
     都调用到AFHTTPRequestSerializer的
- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method URLString:(NSString *)URLString parameters:(nullable NSDictionary <NSString *, id> *)parameters constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block error:(NSError * _Nullable __autoreleasing *)error; 在这里面就会用到AFStreamingMultipartFormData,此时parameters及通过AFStreamingMultipartFormData添
     加进来的数据都会变一项项的AFHTTPBodyPart存起来,当上传系统需要读数据时就通过AFHTTPBodyPart取数据。 }
else //即((put||post||patch) && !单提交时) { AFHTTPRequestSerializer:把parameters拼接成字符串后(如何拼接细节后面写)
     序列化成NSData放到HTTPRequest的HTTPBody中。
AFJSONRequestSerializer:把parameters以dataWithJSONObject方式序列化
     成NSData放到HTTPRequest的HTTPBody中。
AFPropertyListRequestSerializer:把请求parameters以dataWithPropertyList
     方式序列化成NSData放到HTTPRequest的HTTPBody中。 }

 AFMultipartFormData协议:定义了一些接口方法,允许用户可以用不同的方式添加表单的内容,如:使用文件路径、直接用NSData、或使用inputStream等。

AFStreamingMultipartFormData:遵循了AFMultipartFormData协议,把协议的方法都实现了。

AFMultipartBodyStream:它起着一个重要桥梁作用,上传表单数据时系统会先调到它,然后它会依赖AFHTTPBodyPart读到数据,然后把数据返回给系统调用。

AFHTTPBodyPart:每一个AFHTTPBodyPart就是代表一项表单数据,由它真正读取它内部的数据(不管是以什么形式存在的:文件路径,NSData,又或者NSInputStream)。


 实现细节

  接下来(未完待续...)

 

 

ios AFNetworking 3.0 原码阅读分析 (一)(AFURLRequestSerialization)

标签:

原文地址:http://www.cnblogs.com/chenxianming/p/5674652.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!