AFNetworking实现原理理解

NSURLSession:

NSURLSession由三个基本模块构成:

NSURLSession前端

NSURLSessionConfiguation安全

NSURLSessionTask服务器

NSURLSession相对于平时通讯中的会话,但自己却不会进行网络数据传输,它会穿件多个NSURLSessionTask去执行每次的网络请求网络

NSURLSession的行为取决于三个方面。包括NSURLSession的类型、NSURLSessionTask的类型和在建立task时APP是否处于前端session

NSURLSession有三种类型

defaultSession将cache和creditials储存于本地spa

Ephemeral Session对数据更加保密安全,并不会向本地储存任何数据,将cache和creditials储存在内存中,并和Session绑定,当Session销毁时,对应的数据也会被销毁。3d

backgroundSession能够时APP处于后台时继续数据传输,其行为与defaultSession相似,可是全部的数据传输均由一个非本APP的进程来管理。也有一些功能上的限制。代理

在建立Session对象时经过NSURLSessionConfigration来配置,可设置Session的delegate对象

Session一但配置完成,就不能修改,除非建立一个新的Session对象。blog

NSURLSessionTask包括三种Task类型,分别为:NSURLSessionDataTask,NSURLSessionDownLoadTask,NSURLSessionUploadTask

全部的Task状态都是暂停的,须要用[Task resume]启动Task

NSURLSession有两种获取数据的方式:

初始化session时指定delegate,在代理方法中返回数据,须要实现NSURLSession的两个代理方法

初始化Session时未指定delegate的,经过block回调返回数据。

NSURLSession对象的销毁,有两种销毁模式:

- (void)invalidateAndCancel 取消该Session中的全部Task,销毁全部delegate、block和Session自身,调用后Session不能再复用。

- (void)finishTasksAndInvalidate 会当即返回,但不会取消已启动的task,而是当这些task完成时,调用delegate

这里有个地方须要注意,即:NSURLSession对象对其delegate都是强引用的,只有当Session对象invalidate, 才会释放delegate,不然会出现memory leak。

使用Session加速网络访问速度,使用同一个Session中的task访问数据,不用每次都实现三次握手,复用以前服务器和客户端之间的网络连接,从而加快访问速度。

AFNetworking:

AFNetworking是封装的NSURLSession的网络请求

AFNetworking由五个模块组成:

分别由NSURLSession,Security,Reachability,Serialization,UIKit五部分组成

NSURLSession:网络通讯模块(核心模块) 对应 AFNetworking中的 AFURLSessionManager和对HTTP协议进行特化处理的AFHTTPSessionManager,AFHTTPSessionManager是继承于AFURLSessionmanager的

Security:网络通信安全策略模块  对应 AFSecurityPolicy

Reachability:网络状态监听模块 对应AFNetworkReachabilityManager

Seriaalization:网络通讯信息序列化、反序列化模块 对应 AFURLResponseSerialization

UIKit:对于IOSUIKit的扩展库

网络请求的过程:

建立NSURLSessionConfig对象--用建立的config对象配置初始化NSURLSession--建立NSURLSessionTask对象并resume执行,用delegate或者block回调返回数据。

AFURLSessionManager封装了上述网络交互功能

AFURLSessionManager请求过程

1.初始化AFURLSessionManager。

2.获取AFURLSessionManager的Task对象

3.启动Task

AFURLSessionManager会为每个Task建立一个AFURLSessionmanagerTaskDelegate对象,manager会让其处理各个Task的具体事务,从而实现了manager对多个Task的管理

初始化好manager后,获取一个网络请求的Task,生成一个Task对象,并建立了一个AFURLSessionmanagerTaskDelegate并将其关联,设置Task的上传和下载delegate,经过KVO监听download进度和upload进度

NSURLSessionDelegate的响应

由于AFURLSessionmanager所管理的AFURLSession的delegate指向其自身,所以全部的

NSURLSessiondelegate的回调地址都是AFURLSessionmanager,而AFURLSessionmanager又会根据是否须要具体处理会将AF delegate所响应的delegate,传递到对应的AF delegate去

 

 

相关文章
相关标签/搜索