AFN基本使用

AFN基本使用

簡介

  • 框架結構
    • NSURLSession
      • NSURLSessionManager對NSURLSession的封裝
      • AFHTTPSessionManager會話管理者
    • 序列化處理Serialization
      • AFURLRequestSerilization請求
      • AFURLResponseSerilization響應
    • 擴展功能
      • AFSecurityPolicy安全
      • AFNetworkReachabilityManager監(jiān)聽
    • UIKit+AFNetworking
      • 下載緩存圖片UIImageView+AFNetworking
        • 思考:這個和SDWebImage有什么區(qū)別呢乘凸?
      • 很多好用的分類

GET請求

  • 創(chuàng)建會話管理者
    • [AFHTTPSessionManager manager]
  • 創(chuàng)建字典保存參數(shù)
  • 發(fā)送請求
    • [manager GET:parameters:progress:{}success:{}failure:^{}]
      • 參數(shù)一:請求路徑不包含參數(shù),類型是NSString
      • 參數(shù)二:參數(shù)瑞你,用字典保存參數(shù)
      • 參數(shù)三:進度回調(diào)憎夷,發(fā)送GET請求不需要進度信息,nil
      • 參數(shù)四:網(wǎng)絡請求成功之后的回調(diào)
        • dataTask:請求任務本身
          • task.response是響應頭
        • responseObject:不是響應頭锨亏,是響應體,內(nèi)部已經(jīng)完成了反序列化處理 (已經(jīng)把JSON轉(zhuǎn)為了OC對象了)
      • 參數(shù)五:網(wǎng)絡請求失敗之后的回調(diào)
        • task:請求任務
        • error:錯誤信息

POST請求

  • 創(chuàng)建會話管理者
    • [AFHTTPSessionManager manager]
  • 創(chuàng)建字典保存參數(shù)
  • 發(fā)送請求
    • [manager POST:parameters:progress:{}success:{}failure:^{}]
      • 參數(shù)一:請求路徑不包含參數(shù),類型是NSString
      • 參數(shù)二:參數(shù)廓握,用字典保存參數(shù)
      • 參數(shù)三:進度回調(diào)伴鳖,發(fā)送GET請求不需要進度信息,nil
      • 參數(shù)四:網(wǎng)絡請求成功之后的回調(diào)
        • dataTask:請求任務本身
          • task.response是響應頭
        • responseObject:不是響應頭锯梁,是響應體即碗,內(nèi)部已經(jīng)完成了反序列化處理 (已經(jīng)把JSON轉(zhuǎn)為了OC對象了)
      • 參數(shù)五:網(wǎng)絡請求失敗之后的回調(diào)
        • task:請求任務
        • error:錯誤信息

使用AFN實現(xiàn)文件下載

  • 創(chuàng)建會話管理者

    • [AFHTTPSessionManager manager]
  • 確定請求路徑

  • 創(chuàng)建請求對象

  • 下載

    • [manager downloadTaskWithRequest:progress:destination:completionHandler:
      • 參數(shù)一:請求對象
      • 參數(shù)二:進度回調(diào)
        • NSProgress
        • 計算進度
          • downloadProgress.completedUnitCount/downloadProgress.totalUnitCount;
      • 參數(shù)三:destination做URL處理的回調(diào),告訴下載完之后文件寫到哪里 ,內(nèi)部自動做了剪切處理
        • targetPath:文件下載到沙盒中的臨時路徑
        • response響應頭信息
        • 返回值:告訴AFN文件應該剪切到什么地方
        • 怎么把路徑轉(zhuǎn)為URL?
          • [NSURL fileURLWithString:]
      • 參數(shù)四:完成之后的回調(diào)
        • filePath:就是文件最終保存的位置
  • 執(zhí)行任務

    • [downloadTask resume];
  • 優(yōu)點:

    • 通過block塊集成了下載進度
    • 內(nèi)部完成了文件剪切處理

使用AFN實現(xiàn)文件上傳

  • 不用拼接了
  • 創(chuàng)建會話管理者
  • 發(fā)送POST請求上傳文件
  • [manager POST:parameters:constructingBodyWithBlock:progress:success:failure:]
    • 參數(shù)一:請求路徑
    • 參數(shù)二:非文件參數(shù)陌凳,用字典來傳
    • 參數(shù)三:block塊剥懒,處理要上傳的文件的
      • fromData:遵守AFMultipartFormData協(xié)議
        • append有些方法不能用
        • 方式一:appendPartWithFileData:name:fileName:mimeType:
          • 參一:要上傳的文件數(shù)據(jù)
          • 參二:由后臺接口規(guī)定的file
          • 參三:文件上傳到服務器之后,以什么名稱保存
          • 參四:文件的二進制數(shù)據(jù)類型(四種方法獲得)image/png
        • 方式二:appendPartWithFileURL:name:filename:mimeType:error:
          • 參一:fileURLWithPath:
          • 參二:file
          • 參三:文件上傳到服務器以什么名稱保存
          • 參四:文件的二進制數(shù)據(jù)
        • 方式三:appendPartWithFileURL:name:error:
          • 內(nèi)部實現(xiàn)
            • 文件名稱是拿到文件路徑的最后一個節(jié)點
            • C語言方法獲得mimeType的方法獲得mimeType
    • 參數(shù)四:進度回調(diào)
      • 進度:當前已經(jīng)完成的/總大小
    • 參數(shù)五:成功之后的回調(diào)
      • responseObject:響應體合敦,內(nèi)部把JSON數(shù)據(jù)轉(zhuǎn)為了OC對象
    • 參數(shù)六:失敗之后的回調(diào)

AFN使用技巧

  • 封裝網(wǎng)絡請求工具類
    • 工具類依賴AFN
    • 控制器里面發(fā)送網(wǎng)絡請求的代碼用工具類來實現(xiàn)
    • 封裝思想

AFN序列化處理

  • 創(chuàng)建會話管理者

    • [AFHTTPSessionManager manager]
  • 創(chuàng)建字典保存參數(shù)

  • 發(fā)送請求

    • [manager GET:parameters:progress:{}success:{}failure:^{}]
  • 問題一:如果服務器返回的不是JSON數(shù)據(jù)初橘,而是XML數(shù)據(jù)怎么處理?

    • 該請求服務器返回的是XML數(shù)據(jù)充岛,而AFN默認以JSON的方式來處理XML數(shù)據(jù)
    • 解決:
      • 如果返回的數(shù)據(jù)是xml保檐,那么應該修改對響應的處理方式為XML
      • manager.responserSerilizer = [AFXMLEParserResponseSerializer serializer]
        • 創(chuàng)建XML解析器
          • (NSXMLParser *)responseObject;
        • 設置代理:parser.delegate = self
        • 開始解析[parser parse]
      • 遵守協(xié)議/實現(xiàn)代理方法didStartElement:
  • 問題二:如果服務器返回的既不是JSON也不是XML怎么辦?比如對圖片發(fā)請求(二進制數(shù)據(jù))

    • 默認以JSON方式處理
    • 請求失敗崔梗,怎么解決
      • 如果服務器返回的數(shù)據(jù)既不是JSON也不是XML夜只,那么就設置為HTTP的解析方式
      • manager.responserSerilizer = [AFHTTPResponseSerializer serializer]
        • imageWithData:
  • 問題三:如果請求的不是圖片,而是網(wǎng)頁怎么辦蒜魄?

    • 比如對百度發(fā)請求
    • 既不是JSON也不是XML使用 AFHTTPResponseSerializer
  • 問題四:以JSON的方式傳參數(shù)

    • 之前的處理方式:字典
    • manager.requestSerializer = [AFJSONRequestSerializer serializer]

NSURLSession和NSURLConnection對比

  • NSURLSession支持http2.0協(xié)議 ios9.0之后
  • NSURLSession在處理下載任務的時候扔亥,可以直接把數(shù)據(jù)下載到沙盒里面
  • NSURLSession支持后臺下載|上傳
  • 同一個NSURLSession發(fā)送多個請求,只需要建立一次連接(復用TCP)
  • NSURLSession提供了全局的session并且可以統(tǒng)一配置谈为,使用更加方便
  • NSURLSession下載的時候是多線程異步處理的旅挤,效率更高

總結

  • 文件下載
    • NSURLSessionDataTask - 離線斷點下載(斷點續(xù)傳)
    • NSURLSessionDownloadTask -- 缺點:無法離線斷點下載
  • 文件上傳
  • AFN基本使用
    • GET|POST
    • 下載|上傳
    • 工具類|序列化
    • NSURLSession|NSURLConnection對比

AFN監(jiān)測網(wǎng)絡狀態(tài)改變

  • 網(wǎng)絡狀態(tài)改變
    • 3G/Wifi的切換
    • AFNetworkReachabilityManager
  • 創(chuàng)建一個網(wǎng)絡狀態(tài)監(jiān)聽管理者
    • AFNetworkReachabilityManager sharedManager
  • 監(jiān)聽狀態(tài)改變
    • [manager setReachabilityStatusChangeBlock:^{}]

      • status:
        • Unkown:網(wǎng)絡狀態(tài)未知
        • NotReachable:沒有網(wǎng)絡
        • ViaWWAN:蜂窩網(wǎng)絡
        • ViaWiFi :wifi
    • 開啟網(wǎng)絡狀態(tài)監(jiān)聽者

      • startMonitoring真機演示
      • iTools
        • 以前可以通過iTools拿到應用,對應用做一些操作峦阁,現(xiàn)在要拿到應用的數(shù)據(jù)要花錢谦铃,拿不到應用的包
        • 我的iphone應用
        • finder中顯示 .ipa
        • 歸檔實用工具打開,可以拿到圖片數(shù)據(jù)榔昔,顯示包內(nèi)容
        • 開發(fā)中驹闰,需要提測,提測的時候測試部門一般會提供一些測試機撒会,提測的時候嘹朗,怎么把項目運行到測試機上呢?
          • 提測的時候會要求存檔诵肛,打包成ipa包屹培,用iTools安裝
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末默穴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子褪秀,更是在濱河造成了極大的恐慌蓄诽,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件媒吗,死亡現(xiàn)場離奇詭異仑氛,居然都是意外死亡,警方通過查閱死者的電腦和手機闸英,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門锯岖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人甫何,你說我怎么就攤上這事出吹。” “怎么了辙喂?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵捶牢,是天一觀的道長。 經(jīng)常有香客問我加派,道長叫确,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任芍锦,我火速辦了婚禮竹勉,結果婚禮上,老公的妹妹穿的比我還像新娘娄琉。我一直安慰自己次乓,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布孽水。 她就那樣靜靜地躺著票腰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪女气。 梳的紋絲不亂的頭發(fā)上杏慰,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音炼鞠,去河邊找鬼缘滥。 笑死,一個胖子當著我的面吹牛谒主,可吹牛的內(nèi)容都是我干的朝扼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼霎肯,長吁一口氣:“原來是場噩夢啊……” “哼擎颖!你這毒婦竟也來了榛斯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤搂捧,失蹤者是張志新(化名)和其女友劉穎驮俗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體异旧,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡意述,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吮蛹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡拌屏,死狀恐怖潮针,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情倚喂,我是刑警寧澤每篷,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站端圈,受9級特大地震影響焦读,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舱权,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一矗晃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宴倍,春花似錦张症、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至阔逼,卻和暖如春兆衅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嗜浮。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工羡亩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人周伦。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓夕春,卻偏偏與公主長得像,于是被迫代替她去往敵國和親专挪。 傳聞我的和親對象是個殘疾皇子及志,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1.AFN使用技巧 1.在開發(fā)的時候可以創(chuàng)建一個工具類片排,繼承自我們的AFN中的請求管理者,再控制器中真正發(fā)請求的代...
    YSL一路行走閱讀 1,218評論 1 3
  • 1.在開發(fā)的時候可以創(chuàng)建一個工具類速侈,繼承自我們的AFN中的請求管理者率寡,再控制器中真正發(fā)請求的代碼使用自己封裝的工具...
    紅樓那一場夢閱讀 3,476評論 2 3
  • 1.請簡單說明多線程技術的優(yōu)點和缺點? 優(yōu)點能適當提高程序的執(zhí)行效率能適當提高資源的利用率(CPU/內(nèi)存利用率) ...
    彼岸的黑色曼陀羅閱讀 451評論 0 2
  • 全稱是AFNetworking倚搬,是對NSURLSession的一層封裝 雖然運行效率沒有ASI高冶共,但是使用比ASI...
    翻這個墻閱讀 1,031評論 7 4
  • 我是被動做上小混混的。進入高中之前的讀書生涯都有我媽媽和舅舅的校長身份罩著每界,沒受過高年級同學的欺負捅僵。然而在這所高...
    釋迦煩了閱讀 456評論 0 2