關(guān)于AFNetworking 3.0的介紹百度少之又少,沒(méi)辦法只能去谷歌吧啦了十性,為了以后閱讀方便叛溢,收錄到個(gè)人簡(jiǎn)書(shū)中,原文鏈接劲适。
從3.0開(kāi)始
一轉(zhuǎn)眼楷掉,AF已經(jīng)更新到了3.0版本。目前cocoapods上的最新版本是3.0 beta1霞势。在3.0的版本里面烹植,AF全面地使用NSURLSession代替了NSURLConnection。之前花了一些時(shí)間學(xué)習(xí)NSURLSession愕贡,在這里的學(xué)習(xí)終于派上了用場(chǎng)草雕。在這里主要學(xué)習(xí)3.0版本的使用。希望在項(xiàng)目中能夠順利地過(guò)度到AFNetwoking 3.0版本颂鸿。此外促绵,隨著Objective-c慢慢被Swift替代,AFNetworking 3.0可能是最后一個(gè)大版本更新嘴纺。本文會(huì)一直隨著AN的更新繼續(xù)更新败晴,也是一個(gè)不斷學(xué)習(xí)的過(guò)程。
結(jié)構(gòu)
--
在3.0時(shí)代栽渴,AFN精簡(jiǎn)了結(jié)構(gòu)尖坤,全面使用了NSURLSession。
AFHTTPSessionManager是AFURLSessionManager的子類(lèi)慢味。
AFURLSessionManager
--
AFURLSessionManager實(shí)現(xiàn)了以下幾種NSURLSession的代理方法
NSURLSessionDelegate
- URLSession:didBecomeInvalidWithError:
- URLSession:didReceiveChallenge:completionHandler:
- URLSessionDidFinishEventsForBackgroundURLSession:
NSURLSessionTaskDelegate
- URLSession:willPerformHTTPRedirection:newRequest:completionHandler:
- URLSession:task:didReceiveChallenge:completionHandler:
- URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:
- URLSession:task:didCompleteWithError:
NSURLSessionDataDelegate
- URLSession:dataTask:didReceiveResponse:completionHandler:
- URLSession:dataTask:didBecomeDownloadTask:
- URLSession:dataTask:didReceiveData:
- URLSession:dataTask:willCacheResponse:completionHandler:
NSURLSessionDownloadDelegate
- URLSession:downloadTask:didFinishDownloadingToURL:
- URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:
- URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:
成員
屬性
在AFURLSessionManager中,主要的三個(gè)屬性如下
session實(shí)現(xiàn)了會(huì)話墅冷,operationQueue是一個(gè)操作隊(duì)列纯路。responseSerializer是實(shí)現(xiàn)AFURLResponseSerialization
協(xié)議的一個(gè)對(duì)象。
方法
創(chuàng)建一個(gè)NSURLSessionDataTask數(shù)據(jù)性任務(wù)
創(chuàng)建`NSURLSessionUploadTask上傳任務(wù)
創(chuàng)建NSURLSessionDownloadTask下載任務(wù)
獲得一個(gè)特定任務(wù)的progress進(jìn)度
Session Delegate Callbacks 設(shè)置會(huì)話代理回調(diào)
Task Delegate Callbacks 設(shè)置任務(wù)代理回調(diào)
當(dāng)任務(wù)需要一個(gè)新的請(qǐng)求體發(fā)送給服務(wù)器的時(shí)候叫编。
當(dāng)HTTP請(qǐng)求回調(diào)有重定向的的話設(shè)置這個(gè)Block
當(dāng)一個(gè)請(qǐng)求需要特別的鑒權(quán)的時(shí)候設(shè)置這個(gè)challenge
設(shè)置一個(gè)block去追蹤上傳進(jìn)度
設(shè)置一個(gè)block當(dāng)任務(wù)完成后執(zhí)行
Setting Data Task Delegate Callbacks 設(shè)置數(shù)據(jù)任務(wù)代理的回調(diào)
設(shè)置一個(gè)在數(shù)據(jù)任務(wù)獲得response的時(shí)候回調(diào)block
設(shè)置一個(gè)block當(dāng)數(shù)據(jù)任務(wù)變成下載的任務(wù)的時(shí)候執(zhí)行
設(shè)置一個(gè)block當(dāng)數(shù)據(jù)任務(wù)獲得到數(shù)據(jù)的時(shí)候
設(shè)置一個(gè)block絕對(duì)是否緩存數(shù)據(jù)任務(wù)
Download Task Delegate Callbacks 下載任務(wù)代理回調(diào)
設(shè)置block當(dāng)下載任務(wù)完成下載后
設(shè)置block去追蹤下載任務(wù)進(jìn)度情況
設(shè)置block當(dāng)下載任務(wù)執(zhí)行/恢復(fù)的時(shí)候 執(zhí)行
頭文件的內(nèi)容基本就是以上的了∨祝可以看到整個(gè)AF的體系非常清晰完整搓逾,沒(méi)有多余的東西,頭文件只暴露了應(yīng)該暴露的東西杯拐,值得我們?nèi)W(xué)習(xí)霞篡。
使用的例子
使用AFURLSessionManager
從源碼中可以看到世蔗,AFURLSessionManager實(shí)現(xiàn)了
<code>NSURLSessionDelegate, NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate, NSSecureCoding, NSCopying</code>
首先需要設(shè)置url和NSURLConfirguration這里是使用百度API商店的公開(kāi)API
然后初始化Manager
設(shè)置ResponseSerializer
初始化request
對(duì)request進(jìn)行相關(guān)設(shè)置
根據(jù)request生成對(duì)應(yīng)的NSURLSessionTask。
執(zhí)行任務(wù)
來(lái)看看執(zhí)行后的信息
這里由于使用的AFHTTPResponseSerializer
(API的問(wèn)題寇损,僅僅支持text/plain)所以在獲取的數(shù)據(jù)后凸郑,我們自己要json序列化。如果是設(shè)計(jì)好的API,直接使用AFJSONRequestSerializer
就可以在回調(diào)中獲取到j(luò)son格式的數(shù)據(jù)了矛市。
可以看到芙沥,整個(gè)使用還是很方便的。我們可以根據(jù)自己的需求配置不同設(shè)置浊吏。