一、简介
一、NSURLRequest
NSURLRequest是个独立加载请求的解决方法,它封装了两个基本的元素:请求的URL和相关的缓存机制NSURLRequestCachePolicy
NSURLRequest中可以添加HTTP相关的各种首部字段例如HTTPMethod,Cookie,Content-Type等。
二、NSURLSession和NSURLSessionTask
NSURLSession: 使用者建立起的网络对话
NSURLSessionConfiguration是NSURLSession的配置,可以统一配置NSURLSession一些设置。
NSURLSession和废弃的NSURLConnection的差异:
"NSURLConnection是全局性的,即它的配置对全局有效,如果有两个链接需要不同的cookies、证书这些公共资源,则NSURLConnection无法满足要求,这时NSURLSession的优势则体现出来,NSURLSession可以同过NSURLSessionConfiguration可以设置全局的网络访问属性。"
NSURLSessionTask: 一个具体的网络任务类,但它是一个抽象类,有许多的子类能实现不同的功能,每个子类也有不同的Delegate协议。
NSURLSessionDataTask其中一个子类,也是网络请求中最常用的请求之一。
NSURLSessionDelegate: 系统有一个全局的NSURLSession单例,但是这样如果想要实现单独监控,就需要实例化单独的Session任务,并且通过NSURLSessionDelegate进行监听。
二、AFNetworking中的AFURLSessionManager
它负责请求的建立、管理、销毁请求重启等各种功能。他主要实现了NSURLSession和NSURLSessionTask的封装。
AFNetworking中有开辟一条常驻线程请求网络数据。如果没有这条线程的话,就会每次请求网络就去开辟线程,完成之后销毁开辟线程,这样就造成资源的浪费,开辟一条常住线程,就可以避免这种浪费,我们可以在每次的网络请求都添加到这条线程。
(1)AFURLSessionManager内部拥有一个maxConcurrentOperationCount = 1的NSOperationQueue,用于运行本身私有的一个NSURLSessionConfiguration和NSURLSession。
这个私有的NSURLSession管理了一系列的NSURLSessionDataTask/NSURLSessionUploadTask/
NSURLSessionDownloadTask
(2) 当传入一个request时候,会用一个串行线程同步去创建task并赋予监听状态的delegate,并且让使用者可以去定义completion等handler,也可以实现重定向
3) AFURLSessionManager对建立的每一个task都分配了响应的AFURLSessionManagerTaskDelegate,遵循了NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate三个protocol
每个task以task.id为key存储在一个dictionary中且使用lock来保证读写线程安全。
"AFURLSessionManagerTaskDelegate这个类主要是把NSURLSeesion的部分代理方法让他处理。从而达到简化代码的目的。"
如何解决session设置代理之后对代理对象的强引用问题?
(https://www.jianshu.com/p/5fd65c20912e)
NSURLSession对象在使用的时候,如果设置了代理,那么session对代理对象会保持一个强引用,在合适的时候应该主动进行释放
可以在控制器调用viewDidDisappear方法的时候来进行处理,可以通过调用invalidateAndCancel方法或者是finishTasksAndInvalidate方法来释放对代理对象的强引用
invalidateAndCancel方法直接取消请求然后释放代理对象,finishTasksAndInvalidate方法等请求完成之后释放代理对象。
(4)使用信号量来控制异步的block中可以同步到获取不同类型的数组
(5)让session可以归档解档,实现copy
Reference:
https://www.cnblogs.com/mddblog/p/5215453.html
https://www.cnblogs.com/HeiNeiKu/p/5628498.html
https://www.cnblogs.com/36bian/p/5237138.html
http://www.cocoachina.com/ios/20161018/17785.html
https://www.jianshu.com/p/e15592ce40ae
https://www.jianshu.com/p/5fd65c20912e