美文网首页面试iOS技术
AFNetworking实现原理

AFNetworking实现原理

作者: ChancePro | 来源:发表于2018-08-29 10:26 被阅读859次

    AFNetworking有5个模块:

    一、NSURLSession 网络请求模块

    AFHTTPSessionManager

    继承自AFURLSessionManager

    1. post
    2. get
    3. 上传
    AFURLSessionManager

    管理所有的请求,设置了NSURLSessionTaskDelegate, NSRULSessionDataDelegate,NSURLSessionDownloadDelegate实现证书合法性校验,数据传输进度检测,数据请求成功/失败的回调。
    使用Runtime用af_suspend替换 suspend, 用af_resume替换了resume 当调用者两个方法时往上层发送通知 AFNetworkingTaskDidSuspendNotification AFNetworkingTaskDidResumeNotification

    1. 请求服务器数据
    2. 上传数据
    3. 多线程下载数据

    二、Reachability 监测网络状态模块

    AFNetworkReachabilityManager

    三、Security 安全策略模块

    AFSecurityPolicy

    iOS项目将服务器端的证书保存导入到项目中,AFN根据项目中的服务器证书来进行验证,验证服务器,保证访问服务器的安全性。

    验证证书的模式有三种:
    1. AFSSLPinningModeNone 不验证
    2. AFSSLPinningModePublicKey 只验证公钥
    3. AFSSLPinningModeCertificate 验证证书的所有内容

    四、Serialization 序列化

    AFURLRequestSerialization
    AFURLResponseSerialization

    五、UIKit UI相关的一些类目

    原理概述

    AFNetworking 是对NSURLSessionTask的封装。AFHTTPSessionManager继承AFURLSessionManager对网络请求进行管理,使用AFURLRequestSerialization对网络请求进行封装,使用AFURLResponseSerialization对响应体进行处理,使用AFSecurityPolicy对服务器证书进行校验。支持HTTPS协议,支持本地证书和服务器证书进行对比验证。AFN数据传递主要使用block和notifacation方式。

    请求过程

    1. GET/POST方法调用抽象的请求方法,指明请求参数,调用全能数据请求方法,指明数据请求方式和参数。
    2. 对请求进行序列化,如果序列化失败,就执行failure block。
    3. 为每一个NSURLSessionDataTask的dataTask增加代理。
    4. 对每一个NSURLSessionDataTask的dataTask增加代理的具体实现,对dataTask设置请求之后的回调delegate和处理block。

    相关文章

      网友评论

        本文标题:AFNetworking实现原理

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