Alamofire源码分析
来源:互联网 发布:最新的数据库处理技术 编辑:程序博客网 时间:2024/06/03 03:57
https://github.com/Alamofire/Alamofire/
Alamofire是iOS Swift居家必备的http交互良品, 目前github上已经2万多星了。 学习Alamofire可以更好的使用它, 并学习Swift的语法。 我先后完整的看了4遍, 并运行demo并debug出调用时序,对Swift的理解更全面了。
Alamofire是对iOS原生类URLSession, URLSessionDelegate, URLSessionTask和URLSessionTaskDelegate的封装, 每个Request创建一个URLSessionTask实例后执行来实现http交换, 使用OperationQueue链式处理http响应的序列化。
下图是Alamofire代码结构,Alamofire类是就是一层对SessionManager封装, 其中SessionDelegate、SessionManager和TaskDelegate是核心类, 看懂这3个类就明白Alamofire的执行流程了。
Alamofire将请求分为DataRequest、DownloadRequest、UploadRequest和StreamRequest,与之对应的是响应DefaultDataResponse、DataResponse、DefaultDownloadResponse和DownloadResponse。
看过OkHttp源码的都知道它里面有个Interceptor拦截器, 作用就是篡改请求头和数据;Alamofire也实现了类似的逻辑叫做RequestAdapter, 实现协议接口从而修改request请求的原始参数。
下面看看Request是怎么执行的: 例如一个普通的POST字符串操作, 最终走到URLSessionManager的request函数。
默认startRequestsImmediately为真, 所以每次创建request后都会执行resume方法即执行http交互。
/// Whether to start requests immediately after being constructed. `true` by default. open var startRequestsImmediately: Bool = true
PS: 如果将startRequestsImmediately设为false, 那么就需要你主动调用resume方法, 否则这个Request一直存在SessionDelegate对象的requests数组中(delegate[task]=request)。 Response也是通过查找requests数组来执行对应的回调。
private var requests: [Int: Request] = [:]
下面介绍Response:
Alamofire支持一个Request对应多个Response, 而Response是按顺序先后执行的。request.responseString { response in requestComplete(response.response, response.result) }.responseJSON { response in //... }
因为maxConcurrentOperationCount等于1, 所以queue可认为是单线程队列。
let queue = { () -> OperationQueue in let operationQueue = OperationQueue() operationQueue.maxConcurrentOperationCount = 1 operationQueue.isSuspended = true operationQueue.qualityOfService = .utility return operationQueue}()
- Alamofire源码分析
- Alamofire分析
- Alamofire源码解读
- alamofire 源码解读
- Alamofire
- 从Alamofire中得到返回值 分析
- Alamofire源码解读系列(二)之错误处理(AFError)
- Alamofire源码解读系列(二)之错误处理(AFError)
- Alamofire源码解读系列(二)之错误处理(AFError)
- Alamofire源码解读系列(四)之参数编码(ParameterEncoding)
- Alamofire源码解读系列(四)之参数编码(ParameterEncoding)
- Alamofire源码解读系列(四)之参数编码(ParameterEncoding)
- Alamofire源码解读系列(五)之结果封装(Result)
- Alamofire源码解读系列(一)之概述和使用
- Alamofire源码解读系列(二)之错误处理(AFError)
- Alamofire源码解读系列(三)之通知处理(Notification)
- Alamofire源码解读系列(四)之参数编码(ParameterEncoding)
- Alamofire源码解读系列(五)之结果封装(Result)
- eclipse 使用extjs做发开,总是卡死
- 希尔排序
- Sqoop安装配置教程
- mac scala搭建
- 前端之git常用命令
- Alamofire源码分析
- 单独刷新页面中ckfinder部分,ckfinder如何重新加载
- GMM
- android studio signature version
- 数字签名机制
- DateTimePicker中自定义时间或日期显示格式
- caffe (5) 命令行解析
- sort函数的用法(C++排序库函数的调用)
- kafka+storm+Hbase流式数据处理