【swift源碼閱讀】Alamofire-Part1:NSURLSession基礎

今年七月蘋果發布了swift3.0版本,相比于2.x有了很大改動,很多框架都無法完成向下適配,所以這里提到的框架全部是swift3.0以后的版本。

在介紹Alamofire之前,我們先進行一些基礎知識的介紹。

NSURLSession于13年被蘋果提出,在iOS9中正式棄用NSURLConnection之前,兩者一直是共存的狀態。我們接下來要介紹的Alamofire就是基于NSURLSession的網絡封裝庫。而Alamofire的前身,用oc編寫的AFNetworking則是基于NSURLConnection的(據說現在也改成NSURLSession了)。在進行Alamofire的源碼解讀之前,我們先學習一下NSURLSession的用法。


NSURLSession使用流程

如上圖,NSURLSession的主要功能是用于生成NSURLSessionTask,task才是整個網絡庫的核心。URLSession在其中更像是一個管理者的角色。

整個URLSession的使用流程如下:

1.(可選)生成NSURLSessionConfiguration,利用NSURLSessionConfiguration初始化NSURLSession。你可以自定義NSURLSessionConfiguration,也可以使用系統自帶的模式。

NSURLSessionConfiguration自帶以下三種模式:

官方描述

? ? ?a)URLSessionConfiguration.default:默認模式,通常我們用這種模式就足夠了。default模式下系統會創建一個持久化的緩存并在用戶的鑰匙串中存儲證書。

? ? ?b)URLSessionConfiguration.ephemeral:ephemeral模式中,系統沒有任何持久性存儲,所有內容的生命周期都與session相同,當session無效時,所有內容自動釋放。

? ? ?c)URLSessionConfiguration.background(withIdentifier: <#T##String#>):background模式與default模式非常相似,不過background模式會用一個獨立線程來進行數據傳輸。background模式可以在程序掛起,退出,崩潰的情況下運行task。也可以利用標識符來恢復進程的上下文。

2.(可選)生成NSURLRequest。在request中配置傳輸方法、借口地址、報文頭和報文體的內容等。

3.(必需)NSURLSession利用NSURLRequest或NSURL來生成NSURLSessionTask。NSURLSessionTask有三種類型:

? ? ?a)NSURLSessionDataTask:最常用的task模式,不支持后臺獲取。

? ? ?b)NSURLSessionUploadTask:用于上傳文件,支持后臺上傳。

? ? ?c)NSURLSessionDownloadTask:用于下載文件,支持后臺下載。

4.(必需)NSURLSessionTask調用resume方法,啟動任務。

在利用URLSession進行網絡通信的過程中,只有三四步是必需的。在不配置URLSessionConfiguration的時候,默認使用URLSessionConfiguration.default。當利用url生成task的時候,系統會自動利用url生成對應的request,默認方法為get,默認header與body為nil。

以下是完整的利用session進行網絡通信的代碼:

利用session進行網絡通信

session通信過程中可能還會用到許多其他復雜的特性,我們在源碼解讀的過程中會慢慢滲透。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容