AFNetworking實現(xiàn)原理

框架圖

主要類關(guān)系圖

AFURLSessionManager

  • 創(chuàng)建和管理NSURLSession、NSURLSessionTask
  • 實現(xiàn)NSURLSessionDelegate等協(xié)議的代理方法
  • 引入AFSecurityPolicy保證請求安全
  • 引入AFNetworkReachabilityManager監(jiān)控網(wǎng)絡(luò)狀態(tài)

NSURLSession:

NSURLSession由三個基本模塊構(gòu)成:

  • NSURLSession
  • NSURLSessionConfiguation
  • NSURLSessionTask
  • NSURLSession相對于平時通信中的會話板惑,但本身卻不會進行網(wǎng)絡(luò)數(shù)據(jù)傳輸裆熙,它會傳遞多個NSURLSessionTask去執(zhí)行每次的網(wǎng)絡(luò)請求
    NSURLSession的行為取決于三個方面端礼。包括NSURLSession的類型、NSURLSessionTask的類型和在創(chuàng)建task時APP是否處于前端

NSURLSession有三種類型

defaultSession將cache和creditials儲存于本地

Ephemeral Session對數(shù)據(jù)更加保密安全入录,并不會向本地儲存任何數(shù)據(jù)齐媒,將cache和creditials儲存在內(nèi)存中,并和Session綁定纷跛,當(dāng)Session銷毀時,對應(yīng)的數(shù)據(jù)也會被銷毀邀杏。

backgroundSession可以時APP處于后臺時繼續(xù)數(shù)據(jù)傳輸贫奠,其行為與defaultSession類似唬血,但是所有的數(shù)據(jù)傳輸均由一個非本APP的進程來管理。也有一些功能上的限制唤崭。

在創(chuàng)建Session對象時通過NSURLSessionConfigration來配置拷恨,可設(shè)置Session的delegate

Session一但配置完成,就不能修改谢肾,除非創(chuàng)建一個新的Session對象腕侄。

NSURLSessionTask包括三種Task類型,分別為:NSURLSessionDataTask芦疏,NSURLSessionDownLoadTask冕杠,NSURLSessionUploadTask

所有的Task狀態(tài)都是暫停的,需要用[Task resume]啟動Task

NSURLSession有兩種獲取數(shù)據(jù)的方式:

初始化session時指定delegate酸茴,在代理方法中返回數(shù)據(jù)分预,需要實現(xiàn)NSURLSession的兩個代理方法

初始化Session時未指定delegate的,通過block回調(diào)返回數(shù)據(jù)薪捍。

NSURLSession對象的銷毀笼痹,有兩種銷毀模式:

  • (void)invalidateAndCancel 取消該Session中的所有Task,銷毀所有delegate酪穿、block和Session自身凳干,調(diào)用后Session不能再復(fù)用。

  • (void)finishTasksAndInvalidate 會立即返回被济,但不會取消已啟動的task救赐,而是當(dāng)這些task完成時,調(diào)用delegate

這里有個地方需要注意溉潭,即:NSURLSession對象對其delegate都是強引用的净响,只有當(dāng)Session對象invalidate, 才會釋放delegate喳瓣,否則會出現(xiàn)memory leak馋贤。

使用Session加速網(wǎng)絡(luò)訪問速度,使用同一個Session中的task訪問數(shù)據(jù)畏陕,不用每次都實現(xiàn)三次握手配乓,復(fù)用之前服務(wù)器和客戶端之間的網(wǎng)絡(luò)鏈接,從而加快訪問速度惠毁。

AFNetworking:

AFNetworking是封裝的NSURLSession的網(wǎng)絡(luò)請求

AFNetworking由五個模塊組成:

分別由NSURLSession,Security,Reachability,Serialization,UIKit五部分組成

  • NSURLSession:網(wǎng)絡(luò)通信模塊(核心模塊) 對應(yīng) AFNetworking中的 AFURLSessionManager和對HTTP協(xié)議進行特殊處理的AFHTTPSessionManager,AFHTTPSessionManager是繼承于AFURLSessionmanager的

  • Security:網(wǎng)絡(luò)通訊安全策略模塊 對應(yīng) AFSecurityPolicy

  • Reachability:網(wǎng)絡(luò)狀態(tài)監(jiān)聽模塊 對應(yīng)AFNetworkReachabilityManager

  • Seriaalization:網(wǎng)絡(luò)通信信息序列化犹芹、反序列化模塊 對應(yīng) AFURLResponseSerialization

  • UIKit:對于IOSUIKit的擴展庫

網(wǎng)絡(luò)請求的過程:

創(chuàng)建NSURLSessionConfig對象–>用創(chuàng)建的config對象配置初始化NSURLSession–>創(chuàng)建NSURLSessionTask對象并resume執(zhí)行,用delegate或者block回調(diào)返回數(shù)據(jù)鞠绰。

AFURLSessionManager封裝了上述網(wǎng)絡(luò)交互功能

AFURLSessionManager請求過程

1.初始化AFURLSessionManager腰埂。

2.獲取AFURLSessionManager的Task對象

3.啟動Task

AFURLSessionManager會為每一個Task創(chuàng)建一個AFURLSessionmanagerTaskDelegate對象,manager會讓其處理各個Task的具體事務(wù)蜈膨,從而實現(xiàn)了manager對多個Task的管理

初始化好manager后屿笼,獲取一個網(wǎng)絡(luò)請求的Task牺荠,生成一個Task對象,并創(chuàng)建了一個AFURLSessionmanagerTaskDelegate并將其關(guān)聯(lián)驴一,設(shè)置Task的上傳和下載delegate休雌,通過KVO監(jiān)聽download進度和upload進度

NSURLSessionDelegate的響應(yīng)

因為AFURLSessionmanager所管理的AFURLSession的delegate指向其自身,因此所有的

NSURLSessiondelegate的回調(diào)地址都是AFURLSessionmanager肝断,而AFURLSessionmanager又會根據(jù)是否需要具體處理會將AF delegate所響應(yīng)的delegate杈曲,傳遞到對應(yīng)的AF delegate去

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市胸懈,隨后出現(xiàn)的幾起案子担扑,更是在濱河造成了極大的恐慌,老刑警劉巖箫荡,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魁亦,死亡現(xiàn)場離奇詭異,居然都是意外死亡羔挡,警方通過查閱死者的電腦和手機洁奈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绞灼,“玉大人利术,你說我怎么就攤上這事〉桶” “怎么了印叁?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長军掂。 經(jīng)常有香客問我轮蜕,道長,這世上最難降的妖魔是什么蝗锥? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任跃洛,我火速辦了婚禮,結(jié)果婚禮上终议,老公的妹妹穿的比我還像新娘汇竭。我一直安慰自己,他們只是感情好穴张,可當(dāng)我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布细燎。 她就那樣靜靜地躺著,像睡著了一般皂甘。 火紅的嫁衣襯著肌膚如雪玻驻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天偿枕,我揣著相機與錄音击狮,去河邊找鬼佛析。 笑死,一個胖子當(dāng)著我的面吹牛彪蓬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捺萌,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼档冬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桃纯?” 一聲冷哼從身側(cè)響起酷誓,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎态坦,沒想到半個月后盐数,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡伞梯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年玫氢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谜诫。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡漾峡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出喻旷,到底是詐尸還是另有隱情生逸,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布且预,位于F島的核電站槽袄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锋谐。R本人自食惡果不足惜遍尺,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望怀估。 院中可真熱鬧狮鸭,春花似錦、人聲如沸多搀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽康铭。三九已至惯退,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間从藤,已是汗流浹背催跪。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工锁蠕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人懊蒸。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓荣倾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親骑丸。 傳聞我的和親對象是個殘疾皇子舌仍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內(nèi)容