美文网首页
NSURLSession使用和AFURLSessionManag

NSURLSession使用和AFURLSessionManag

作者: 一只呱呱 | 来源:发表于2018-02-03 19:02 被阅读0次

    一、简介 

    一、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://huang303513.github.io/2017/04/14/AFNetWorking%E6%BA%90%E7%A0%81%E4%B9%8BNSURLSession%E7%B3%BB%E5%88%97%E6%A6%82%E8%BF%B0.html

    https://www.jianshu.com/p/5fd65c20912e

    相关文章

      网友评论

          本文标题:NSURLSession使用和AFURLSessionManag

          本文链接:https://www.haomeiwen.com/subject/vrzuzxtx.html