NSURLSession使用和AFURLSessionManager源码解析

一、简介 

一、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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容