AFURLConnectionOperation
AFURLConnectionOperation继承自NSOpeartion,并且实现了NSURLConnection协议.
主要功能
全局网络线程的创建
使用网络线程创建NSURLConnection发送请求,以及实现NSURLConenction代理方法来处理请求的返回数据。
向用户发送请求的各种消息。
控制着请求的生命周期,暂停,恢复,取消。
可以监听处理批量请求的完成度,有多少个请求已经完成。
请求结束之后调用回调用户的业务逻辑
组成:
networkRequestThread 全局的网络线程对象,用于所有网络请求对象NSURLConnection的初始化|暂停|取消|。与NSURLConnection相关的逻辑都是由它来完成的。
NSURLRequest 包含了一个网络请求的封装。
NSURLResponse 包含了一个网络返回的封装,它是在connection:didReceiveResponse的方法中设置。
NSData responseData 网络返回的数据,在connectionDidFinishLoading方法中获取。
NSInputStream 一个用于读取数据的流,是为NSURLRequest httpBody准备的。
NSOutputStream 一个用户获取网络返回数据的流,在Connection:didReceiveData中将返回的数据一部分一部分的读入,然后在connectionDidFinishLoading方法中将数据填充到responseData中。相当于所有下载的数据会缓存到NSOutputStream中,最后请求结束之后在创建一个完整的responseData。
completionQueue 队列,用于当请求结束的时候将后续的用户业务逻辑以bock的方法放到该队列中执行。
completionGroup 组,用于上一条的队列,它是和batchOfRequestOperations:progressBlock:completionBlock:方法联合起来使用的,通过dispatch_group_t派发组,可以监听多个请求的返回结果的处理完成的事件以及最后所有的请求处理完成的事件。
AFNetworkingOperationDidStartNotification定义用于向用户发送网络请求已经开始的通知。
AFNetworkingOperationDidFinishNotification,定义用于向用户发送网络请求已经结束的通知,在暂停|请求成功|请求失败的时候都会触发,参数是Operation自身。
completionBlock,在NSOperation结束的时候触发,用来处理请求结束之后的业务逻辑,结束指的是请求成功|失败|暂停|取消。
error,用于保存请求中发生的任务错误信息。
AFHTTPRequestOperation
AFHTTPRequestOperation继承自AFURLConnectionOperation,它区别与后者的部分
组成:
responseSerializationError 用于保存反序列化的过程中发生的错误
responseSerializer 它是用于请求结果反序列化的对象,具体可以参考源码分析总结2,默认是AFHTTPResponseSerializer。
responseObject, 它是具体的业务对象的数据(常用的数据形式,还不是业务model层),它是通过responseSerializer反序列化而来
功能:
重写了父类的pause方法,在暂停的时候,对请求对象Request的header做了修改,通过response的ETag字段,设置了请求头If-Range字段。用来实现断点续传的效果,但是仅仅是在app还在运行状态的时候有用。如果app退出则无效果,因为数据是通过NSOutputStream缓存在内存中的,而且If-Range这些信息也仅仅存在于内存对象中。
重写了error方法,优先返回反序列化错误,后返回父类请求中发生的错误。
定义了自己的setCompletionBlockWithSuccess:failure:方法,先检查是否有父类的请求错误,再进行反序列化,最后才会回调请求成功的业务逻辑。
AFHTTPRequestOperationManager
AFHTTPRequestOperationManager是用来管理请求的BaseURL以及多个具体的请求,维护着一个请求队列,请求参数序列化的过程中产生的错误由它以回调的方式告知用户。
组成:
baseURL 用于保存请求的域
requestSerializer 用于某一个请求的参数序列化对象,它的作用就是生成一个NSMutableURLRequest请求对象,该对象最终用于生成AFHTTPRequestOperation对象,默认是AFHTTPRequestSerializer对象。
responseSerializer 用于某一个请求的返回数据的反序列化,是由AFHTTPRequestOperationManager保存,用来给AFHTTPRequestOperation设置反序列化对象。
operationQueue 存放每个请求的队列,放到队列的请求由系统分配线程完成请求。
reachabilityManager 用于判断网络是否可用的组件