前言:第三方網(wǎng)絡(luò)請求框架中AFNetwork 3.x收歡迎程度相當(dāng)高的:
由于iOS 7 和 Mac OS X 10.9 Mavericks 中一個顯著的變化就是對 Foundation URL 加載系統(tǒng)的徹底重構(gòu)。而且現(xiàn)在AFN 3.x版本完全摒棄了NSURLConnection,而使用了NSURLSession。
下載方式:1、直接到github官網(wǎng)上搜索"AFN",看到如圖上圖這樣的受歡迎程度高的自然就是。2、使用cocoapods集成到你的項目中去。
內(nèi)容大綱:
1、AFN 3.X的基本使用
2、AFN 3.X的文件下載
3、AFN 3.X的文件上傳
4、AFN 3.X的使用技巧
5、AFN 3.X 序列化相關(guān)
6、AFN 3.X 網(wǎng)絡(luò)監(jiān)聽
正文:
1、AFN 3.X的基本使用
1-1、步驟:
1-1-1、創(chuàng)建會話管理者
是AFHTTPSessionManager作為會話管理者,用manager創(chuàng)建
不是AFURLSessionManager,而且AFURLSessionManager無manager方法
1-1-2、開始請求,URL都不需要自己創(chuàng)建了。
第一個參數(shù):請求路徑(NSString
以前: http://120.25.226.186:32812/video?type=JSON
http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON
協(xié)議頭+主機地址+接口名稱+?+參數(shù)&參數(shù)
現(xiàn)在:http://120.25.226.186:32812/video
http://120.25.226.186:32812/login
協(xié)議頭+主機地址+接口名稱
第二個參數(shù):要傳遞的參數(shù)(字典)
第三個參數(shù): progress:進度 nil
第四個參數(shù): success:成功,請求成功的回調(diào)
task:請求任務(wù)
responseObject:響應(yīng)體信息,而且內(nèi)部已經(jīng)進行了序列化處理
第五個參數(shù):failure 請求失敗的回調(diào)
task:請求任務(wù)
error:如果失敗,那么error有值
1-2、源碼展示
2、AFN 3.X的文件下載
2-1、步驟:
第一個參數(shù):請求對象
第二個參數(shù):progress 進度信息的回調(diào)
downloadProgress
completedUnitCount:已經(jīng)下載的數(shù)據(jù)大小
totalUnitCount":數(shù)據(jù)的總大小
第三個參數(shù):destination 有返回值
傳遞一個目標(biāo)路徑(NSURL),AFN內(nèi)部會自動執(zhí)行剪切處理
targetPath:臨時路徑
response: 響應(yīng)頭信息
第四個參數(shù):completionHandler 下載完成之后調(diào)用
2-2、源碼展示
3、AFN 3.X的文件上傳
4、AFN 3.X的使用技巧
在實際開發(fā)中,是不會在控制器中直接調(diào)用框架的網(wǎng)絡(luò)請求,比如:如果在網(wǎng)絡(luò)請求的某個控制器中直接調(diào)用了這個AFN框架,會出現(xiàn)后期不好維護的情況,比如一般企業(yè)開發(fā)的app項目會有十來個二十來 個ViewController,大部分控制器都會需要活數(shù)據(jù),也就是需要通過請求網(wǎng)絡(luò)來獲取數(shù)據(jù),那么在多個控制器都導(dǎo)入和使用了AFN框架,而實際開發(fā)需求可能會讓你換掉網(wǎng)絡(luò)請求框架,要將這個AFN框架換成 ASI框架,這樣可想而知,作為碼農(nóng)都要哭了。
那么可行性方案,也是企業(yè)開發(fā)中常常會用到的方法:
在需要網(wǎng)絡(luò)請求的控制器和網(wǎng)絡(luò)請求框架之間建立一個工具類,這個工具類可以是類別,也可以是普通類,然后將網(wǎng)絡(luò)請求的方法簡易封裝起來,最好能應(yīng)對不同情況和不同的數(shù)據(jù)的請求,并且能實現(xiàn),當(dāng) 我將AFN框架替換成ASI框架的時候,控制器里調(diào)用的這個工具類的方法完全不需要改變,要改變的只是工具類中將AFN替換成ASI框架??傊?,創(chuàng)建一個網(wǎng)絡(luò)請求工具類,能夠讓所有的控制器不依賴底層框 架,只依賴這個工具類。
5、AFN 3.X 序列化相關(guān)
5-1、JSON解析,內(nèi)部會自動對JSON數(shù)據(jù)進行反序列化處理,通過響應(yīng)頭信息返回字典對象(可以打印出其類型和字典元素值查看)
不需要手動設(shè)置解析方式。
5-2、XML解析需要協(xié)議輔助解析XML,當(dāng)然也可以使用我的封裝好的能實現(xiàn)XML直接轉(zhuǎn)模型字典的工具類"HYXMLParser"。
需要告訴AFN以XML的方式解析數(shù)據(jù)。
GET方法中要用有NSXMLParser參數(shù)的解析方法。
5-3、直接返回服務(wù)器的HTML數(shù)據(jù)格式,記得將返回的數(shù)據(jù)要設(shè)置Encoding為NSUTF8StringEncoding,然后直接輸出。
需要手動設(shè)置告訴AFN解析方式為不解析,即AFHTTPResponseSerializer serializer。
5-4、對于返回的是NSData格式的數(shù)據(jù),比如網(wǎng)絡(luò)上的返回的圖片、視頻等資源二進制數(shù)據(jù)。
6、AFN 3.X 網(wǎng)絡(luò)監(jiān)聽