NSURLSession前端
NSURLSessionConfiguation安全
NSURLSessionTask服務器
NSURLSession相對於平時通訊中的會話,但自己卻不會進行網絡數據傳輸,它會穿件多個NSURLSessionTask去執行每次的網絡請求網絡
NSURLSession的行爲取決於三個方面。包括NSURLSession的類型、NSURLSessionTask的類型和在建立task時APP是否處於前端session
defaultSession將cache和creditials儲存於本地spa
Ephemeral Session對數據更加保密安全,並不會向本地儲存任何數據,將cache和creditials儲存在內存中,並和Session綁定,當Session銷燬時,對應的數據也會被銷燬。3d
backgroundSession能夠時APP處於後臺時繼續數據傳輸,其行爲與defaultSession相似,可是全部的數據傳輸均由一個非本APP的進程來管理。也有一些功能上的限制。代理
在建立Session對象時經過NSURLSessionConfigration來配置,可設置Session的delegate對象
Session一但配置完成,就不能修改,除非建立一個新的Session對象。blog
NSURLSessionTask包括三種Task類型,分別爲:NSURLSessionDataTask,NSURLSessionDownLoadTask,NSURLSessionUploadTask
全部的Task狀態都是暫停的,須要用[Task resume]啓動Task
NSURLSession有兩種獲取數據的方式:
初始化session時指定delegate,在代理方法中返回數據,須要實現NSURLSession的兩個代理方法
初始化Session時未指定delegate的,經過block回調返回數據。
NSURLSession對象的銷燬,有兩種銷燬模式:
- (void)invalidateAndCancel 取消該Session中的全部Task,銷燬全部delegate、block和Session自身,調用後Session不能再複用。
- (void)finishTasksAndInvalidate 會當即返回,但不會取消已啓動的task,而是當這些task完成時,調用delegate
這裏有個地方須要注意,即:NSURLSession對象對其delegate都是強引用的,只有當Session對象invalidate, 纔會釋放delegate,不然會出現memory leak。
使用Session加速網絡訪問速度,使用同一個Session中的task訪問數據,不用每次都實現三次握手,複用以前服務器和客戶端之間的網絡連接,從而加快訪問速度。
AFNetworking是封裝的NSURLSession的網絡請求
分別由NSURLSession,Security,Reachability,Serialization,UIKit五部分組成
NSURLSession:網絡通訊模塊(核心模塊) 對應 AFNetworking中的 AFURLSessionManager和對HTTP協議進行特化處理的AFHTTPSessionManager,AFHTTPSessionManager是繼承於AFURLSessionmanager的
Security:網絡通信安全策略模塊 對應 AFSecurityPolicy
Reachability:網絡狀態監聽模塊 對應AFNetworkReachabilityManager
Seriaalization:網絡通訊信息序列化、反序列化模塊 對應 AFURLResponseSerialization
UIKit:對於IOSUIKit的擴展庫
建立NSURLSessionConfig對象--用建立的config對象配置初始化NSURLSession--建立NSURLSessionTask對象並resume執行,用delegate或者block回調返回數據。
AFURLSessionManager封裝了上述網絡交互功能
AFURLSessionManager請求過程
1.初始化AFURLSessionManager。
2.獲取AFURLSessionManager的Task對象
3.啓動Task
AFURLSessionManager會爲每個Task建立一個AFURLSessionmanagerTaskDelegate對象,manager會讓其處理各個Task的具體事務,從而實現了manager對多個Task的管理
初始化好manager後,獲取一個網絡請求的Task,生成一個Task對象,並建立了一個AFURLSessionmanagerTaskDelegate並將其關聯,設置Task的上傳和下載delegate,經過KVO監聽download進度和upload進度
由於AFURLSessionmanager所管理的AFURLSession的delegate指向其自身,所以全部的
NSURLSessiondelegate的回調地址都是AFURLSessionmanager,而AFURLSessionmanager又會根據是否須要具體處理會將AF delegate所響應的delegate,傳遞到對應的AF delegate去