Alamofire

Jan 14, 2017


框架结构

SessionManager
+ default: SessionManager
+ defaultHTTPHeaders: HTTPHeaders
multipartFormDataEncodingMemoryThreshold: UInt64
- session: URLSession
- delegate: SessionDelegate
startRequestsImmediately: Bool
adapter: RequestAdapter?
retrier: RequestRetrier?
backgroundCompletionHandler: (() -> Void)?
queue: DispatchQueue
init(configuration: delegate: serverTrustPolicyManager:)

+ init?(session: delegate: serverTrustPolicyManager:)
+ deinit
request(_ url: ) -> DataRequest
download(_ url: ) -> DownloadRequest
- upload(_ fileURL: ) -> UploadRequest
typealias HTTPHeaders = [String: String]
set and get to/from delegate.retrier
init URLSession and set delegate

session.invalidateAndCancel()

URLSession
serverTrustPolicyManager: ServerTrustPolicyManager
delegate: URLSessionDelegate?
SessionDelegate
retrier: RequestRetrier?
subscript(task: URLSessionTask) -> Request?
Ex URLSessionDelegate
Ex URLSessionTaskDelegate
Ex URLSessionDataDelegate
Ex URLSessionDownloadDelegate
Ex URLSessionStreamDelegate
Request
session: URLSession
- delegate:TaskDelegate
retryCount:UInt
+ init(session: requestTask: error:)
resume()
suspend()
cancel()
creat URLSessionTask and Request
URLSession SessionDelegate
Request 循环引用,当task完成后
SessionDelegate根据task移除包
含的Request,从而释放Request

TaskDelegate
- queue: OperationQueue
- data: Data?
error: Error?
task: URLSessionTask?
EX URLSessionTaskDelegate
EX URLSessionDataDelegate
EX URLSessionDownloadDelegate
在queue中添加操作,序列化reques中的数据
该queue创建的时候,isSuspended = true
当task操作完成后,isSuspended = false
从而执行序列化方法,进而执行completionHandler
调用 response(queue: , completionHandler: ) 序列化 data
流程图
SesssionManager.default
DownloadRequest
download()
URLRequest
url+method+parametes+encoding+header
URLSession
RequestAdapter
+
+

URLSessionDownloadTask

调用 DownloadRequest初始化方法
Data Result<Any> HTTPURLResponse Error
调用 response(queue: , completionHandler: ) 序列化 data
task resum
执行 SessionManager 的 SessionDelegate 和 Request 的 TaskDelegate
task finish 开始序列化
URLSession
URLSessionTask
URLSessionConfiguration
URLSessionDelegate
URLSessionStreamTask
URLSessionDownloadTask
URLSessionDataTask
URLSessionUploadTask
URLSessionDataDelegate
URLSessionDownloadDelegate
URLSessionTaskDelegate
URLSessionStreamDelegate
URLSession 框架

URLSessionConfiguration

URLSession 在初始化时会把配置它的 URLSessionConfiguration 对象进行一次 copy,并保存到自己的 configuration 属性中,而且这个属性是只读的。因此之后再修改最初配置 session 的那个 configuration 对象对于 session 是没有影响的。也就是说,configuration 只在初始化时被读取一次,之后都是不会变化的。