AFURLConnectionOperation
AFURLConnectionOperation繼承自NSOpeartion,并且實現(xiàn)了NSURLConnection協(xié)議.
主要功能
全局網(wǎng)絡線程的創(chuàng)建
使用網(wǎng)絡線程創(chuàng)建NSURLConnection發(fā)送請求,以及實現(xiàn)NSURLConenction代理方法來處理請求的返回數(shù)據(jù)。
向用戶發(fā)送請求的各種消息。
控制著請求的生命周期,暫停,恢復,取消。
可以監(jiān)聽處理批量請求的完成度,有多少個請求已經(jīng)完成。
請求結束之后調(diào)用回調(diào)用戶的業(yè)務邏輯
組成:
networkRequestThread 全局的網(wǎng)絡線程對象,用于所有網(wǎng)絡請求對象NSURLConnection的初始化|暫停|取消|。與NSURLConnection相關的邏輯都是由它來完成的。
NSURLRequest 包含了一個網(wǎng)絡請求的封裝。
NSURLResponse 包含了一個網(wǎng)絡返回的封裝,它是在connection:didReceiveResponse的方法中設置。
NSData responseData 網(wǎng)絡返回的數(shù)據(jù),在connectionDidFinishLoading方法中獲取。
NSInputStream 一個用于讀取數(shù)據(jù)的流,是為NSURLRequest httpBody準備的。
NSOutputStream 一個用戶獲取網(wǎng)絡返回數(shù)據(jù)的流,在Connection:didReceiveData中將返回的數(shù)據(jù)一部分一部分的讀入,然后在connectionDidFinishLoading方法中將數(shù)據(jù)填充到responseData中。相當于所有下載的數(shù)據(jù)會緩存到NSOutputStream中,最后請求結束之后在創(chuàng)建一個完整的responseData。
completionQueue 隊列,用于當請求結束的時候將后續(xù)的用戶業(yè)務邏輯以bock的方法放到該隊列中執(zhí)行。
completionGroup 組,用于上一條的隊列,它是和batchOfRequestOperations:progressBlock:completionBlock:方法聯(lián)合起來使用的,通過dispatch_group_t派發(fā)組,可以監(jiān)聽多個請求的返回結果的處理完成的事件以及最后所有的請求處理完成的事件。
AFNetworkingOperationDidStartNotification定義用于向用戶發(fā)送網(wǎng)絡請求已經(jīng)開始的通知。
AFNetworkingOperationDidFinishNotification,定義用于向用戶發(fā)送網(wǎng)絡請求已經(jīng)結束的通知,在暫停|請求成功|請求失敗的時候都會觸發(fā),參數(shù)是Operation自身。
completionBlock,在NSOperation結束的時候觸發(fā),用來處理請求結束之后的業(yè)務邏輯,結束指的是請求成功|失敗|暫停|取消。
error,用于保存請求中發(fā)生的任務錯誤信息。
AFHTTPRequestOperation
AFHTTPRequestOperation繼承自AFURLConnectionOperation,它區(qū)別與后者的部分
組成:
responseSerializationError 用于保存反序列化的過程中發(fā)生的錯誤
responseSerializer 它是用于請求結果反序列化的對象,具體可以參考源碼分析總結2,默認是AFHTTPResponseSerializer。
responseObject, 它是具體的業(yè)務對象的數(shù)據(jù)(常用的數(shù)據(jù)形式,還不是業(yè)務model層),它是通過responseSerializer反序列化而來
功能:
重寫了父類的pause方法,在暫停的時候,對請求對象Request的header做了修改,通過response的ETag字段,設置了請求頭If-Range字段。用來實現(xiàn)斷點續(xù)傳的效果,但是僅僅是在app還在運行狀態(tài)的時候有用。如果app退出則無效果,因為數(shù)據(jù)是通過NSOutputStream緩存在內(nèi)存中的,而且If-Range這些信息也僅僅存在于內(nèi)存對象中。
重寫了error方法,優(yōu)先返回反序列化錯誤,后返回父類請求中發(fā)生的錯誤。
定義了自己的setCompletionBlockWithSuccess:failure:方法,先檢查是否有父類的請求錯誤,再進行反序列化,最后才會回調(diào)請求成功的業(yè)務邏輯。
AFHTTPRequestOperationManager
AFHTTPRequestOperationManager是用來管理請求的BaseURL以及多個具體的請求,維護著一個請求隊列,請求參數(shù)序列化的過程中產(chǎn)生的錯誤由它以回調(diào)的方式告知用戶。
組成:
baseURL 用于保存請求的域
requestSerializer 用于某一個請求的參數(shù)序列化對象,它的作用就是生成一個NSMutableURLRequest請求對象,該對象最終用于生成AFHTTPRequestOperation對象,默認是AFHTTPRequestSerializer對象。
responseSerializer 用于某一個請求的返回數(shù)據(jù)的反序列化,是由AFHTTPRequestOperationManager保存,用來給AFHTTPRequestOperation設置反序列化對象。
operationQueue 存放每個請求的隊列,放到隊列的請求由系統(tǒng)分配線程完成請求。
reachabilityManager 用于判斷網(wǎng)絡是否可用的組件