面试iOS技术

AFNetworking实现原理

2018-08-29  本文已影响859人  ChancePro

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。
上一篇下一篇

猜你喜欢

热点阅读