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