AFNetworking的一些基本使用

首先介紹一下AFNetworking的基本情況

AFNetworking是一款在OS X和iOS下都令人喜愛的網(wǎng)絡(luò)庫。為了迎合iOS新版本的升級, AFNetworking在3.0版本中刪除了基于 NSURLConnection API的所有支持塑荒。如果你的項(xiàng)目以前使用過這些API熄赡,建議您立即升級到基于 NSURLSession 的API的AFNetworking的版本。本指南將引導(dǎo)您完成這個(gè)過程齿税。

本指南是為了引導(dǎo)使用AFNetworking 2.x升級到最新的版本API彼硫,以達(dá)到過渡的目的,并且解釋了新增和更改的設(shè)計(jì)結(jié)構(gòu)凌箕。

新設(shè)備要求: iOS 7, Mac OS X 10.9, watchOS 2, tvOS 9, & Xcode 7

AFNetworking 3.0正式支持的iOS 7拧篮, Mac OS X的10.9, watchOS 2 牵舱, tvOS 9 和Xcode 7串绩。如果你想使用AFNetworking在針對較舊版本的SDK項(xiàng)目,請檢查README的兼容性信息芜壁。

NSURLConnection的API已廢棄

AFNetworking 1.0建立在NSURLConnection的基礎(chǔ)API之上 礁凡,AFNetworking 2.0開始使用NSURLConnection的基礎(chǔ)API ,以及較新基于NSURLSession的API的選項(xiàng)慧妄。 AFNetworking 3.0現(xiàn)已完全基于NSURLSession的API顷牌,這降低了維護(hù)的負(fù)擔(dān),同時(shí)支持蘋果增強(qiáng)關(guān)于NSURLSession提供的任何額外功能塞淹。由于Xcode 7中窟蓝,NSURLConnection的API已經(jīng)正式被蘋果棄用。雖然該API將繼續(xù)運(yùn)行窖铡,但將沒有新功能將被添加疗锐,并且蘋果已經(jīng)通知所有基于網(wǎng)絡(luò)的功能坊谁,以充分使NSURLSession向前發(fā)展。

AFNetworking 2.X將繼續(xù)獲得關(guān)鍵的隱患和安全補(bǔ)丁滑臊,但沒有新的功能將被添加口芍。Alamofire(Swift下的網(wǎng)絡(luò)請求)件基金會建議,所有的項(xiàng)目遷移到基于NSURLSession的API雇卷。

棄用的類

下面的類已從AFNetworking 3.0中廢棄:

AFURLConnectionOperation
AFHTTPRequestOperation
AFHTTPRequestOperationManager
修改的類

下面的類包含基于NSURLConnection的API的內(nèi)部實(shí)現(xiàn)鬓椭。他們已經(jīng)被使用NSURLSession重構(gòu):

UIImageView+AFNetworking
UIWebView+AFNetworking
UIButton+AFNetworking
遷移

AFHTTPRequestOperationManager 核心代碼

如果你以前使用 AFHTTPRequestOperationManager , 你將需要遷移去使用 AFHTTPSessionManager关划。 以下的類在兩者過渡間并沒有變化:

securityPolicy
requestSerializer
responseSerializer
接下來舉一個(gè)關(guān)于AFHTTPSessionManager的簡單例子小染。注意HTTP網(wǎng)絡(luò)請求返回的不再是AFHTTPRequestOperation, 修改成為了NSURLSessionTask,并且成功和失敗的Block塊中的參數(shù)也變更為了NSURLSessionTask贮折,而不再是AFHTTPRequestOperation裤翩。

AFNetworking 2.x

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"請求的url" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"成功");
} failure:^(AFHTTPRequestOperation *operation, NSError*error) {
        NSLog(@"失敗");
}];
AFNetworking 3.0

AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
[session GET:@"請求的url" parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
        NSLog(@"成功");
} failure:^(NSURLSessionDataTask *task, NSError *error) {
        NSLog(@"失敗");
}];
AFHTTPRequestOperation 核心代碼

與NSURLConnection對象不同,每個(gè)共享應(yīng)用范圍的設(shè)置如會話管理调榄、緩存策略踊赠、Cookie存儲以及URL協(xié)議等,這些NSURLSession對象都可以單獨(dú)進(jìn)行配置每庆。使用特定的配置來初始化會話筐带,它可以發(fā)送任務(wù)來獲取數(shù)據(jù),并上傳或下載文件缤灵。

在AFNetworking 2.0中伦籍,使用AFHTTPRequestOperation,有可能創(chuàng)建一個(gè)沒有額外開銷的獨(dú)立的網(wǎng)絡(luò)請求來獲取數(shù)據(jù)腮出。NSURLSession則需要更多的開銷帖鸦,為了獲得所要請求的數(shù)據(jù)。

接下來利诺,將要通過AFHTTPSessionManager創(chuàng)建一個(gè)單例富蓄,并創(chuàng)建一個(gè)任務(wù)和啟動它剩燥。

AFNetworking 2.x

NSURL *URL = [NSURL URLWithString:@""];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
op.responseSerializer = [AFJSONResponseSerializer serializer];
[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
}];
[[NSOperationQueue mainQueue] addOperation:op];
AFNetworking 3.0

NSURL *URL = [NSURL URLWithString:@""];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:URL.absoluteString parameters:nil success:^(NSURLSessionTask *task, id responseObject) {
        NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionTask *operation, NSError *error) {
        NSLog(@"Error: %@", error);
}];
UIKit的遷移

圖片下載已經(jīng)被重構(gòu)慢逾,以遵循AlamofireImage架構(gòu)與新的AFImageDownloader類。這個(gè)類的圖片下載職責(zé)的代理人是UIButton與UIImageView的類目灭红,并且提供了一些方法侣滩,在必要時(shí)可以自定義。類別中变擒,下載遠(yuǎn)程圖片的實(shí)際方法沒有改變君珠。

UIWebView的類目被重構(gòu)為使用AFHTTPSessionManager作為其網(wǎng)絡(luò)請求。

UIAlertView的類目被廢棄

從AFNetworking 3.0后UIAlertView的類目因過時(shí)而被廢棄娇斑。并沒有提供UIAlertController類目的計(jì)劃策添,因?yàn)檫@是應(yīng)用程序應(yīng)處理的邏輯材部,而不是這個(gè)庫。

以上是對AFNetworking基本使用的一些資料唯竹!下面來說一說AFNetworking的基本使用

手下你說一說AFNetworking的get和post請求乐导,代碼如下

getRequest
    //1.創(chuàng)建會話管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    //http://120.25.226.186:32812/login?username=123&pwd=122&type=JSON
    //
    
    NSDictionary *paramDict = @{
                                @"username":@"dandan",
                                @"pwd":@"dandan",
                                @"type":@"JSON"
                                };
    //2.發(fā)送GET請求
    /*
     第一個(gè)參數(shù):請求路徑(不包含參數(shù)).NSString
     第二個(gè)參數(shù):字典(發(fā)送給服務(wù)器的數(shù)據(jù)~參數(shù))
     第三個(gè)參數(shù):progress 進(jìn)度回調(diào)
     第四個(gè)參數(shù):success 成功回調(diào)
                task:請求任務(wù)
                responseObject:響應(yīng)體信息(JSON--->OC對象)
     第五個(gè)參數(shù):failure 失敗回調(diào)
                error:錯(cuò)誤信息
     響應(yīng)頭:task.response
     */
    [manager GET:@"http://168.192.1.18:33322/login" parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        NSLog(@"%@---%@",[responseObject class],responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"請求失敗--%@",error);
    }];

postRequest

//1.創(chuàng)建會話管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    NSDictionary *paramDict = @{
                                @"username":@"dandan",
                                @"pwd":@"dandan",
                                @"type":@"JSON"
                                };
    //2.發(fā)送GET請求
    /*
     第一個(gè)參數(shù):請求路徑(不包含參數(shù)).NSString
     第二個(gè)參數(shù):字典(發(fā)送給服務(wù)器的數(shù)據(jù)~參數(shù))
     第三個(gè)參數(shù):progress 進(jìn)度回調(diào)
     第四個(gè)參數(shù):success 成功回調(diào)
        task:請求任務(wù)
        responseObject:響應(yīng)體信息(JSON--->OC對象)
     第五個(gè)參數(shù):failure 失敗回調(diào)
        error:錯(cuò)誤信息
     響應(yīng)頭:task.response
     */
    [manager POST:@"http://168.192.1.18:33322/login" parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        NSLog(@"%@---%@",[responseObject class],responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"請求失敗--%@",error);
    }];

上面是把AFNetworking的get和post請求列舉了一下!下面說一下它一些高級的使用
使用AFNetworking下載文件浸颓,廢話不多說直接上代碼

  //1.創(chuàng)建會話管理者
    AFHTTPSessionManager *manager =[AFHTTPSessionManager manager];
    
    NSURL *url = [NSURL URLWithString:@"http://168.192.1.18:33322/resources/videos/minion_01.mp4"];
    
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    //2.下載文件
    /*
     第一個(gè)參數(shù):請求對象
     第二個(gè)參數(shù):progress 進(jìn)度回調(diào) downloadProgress
     第三個(gè)參數(shù):destination 回調(diào)(目標(biāo)位置)
                有返回值
                targetPath:臨時(shí)文件路徑
                response:響應(yīng)頭信息
     第四個(gè)參數(shù):completionHandler 下載完成之后的回調(diào)
                filePath:最終的文件路徑
     */
    NSURLSessionDownloadTask *download = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
        
        //監(jiān)聽下載進(jìn)度
        //completedUnitCount 已經(jīng)下載的數(shù)據(jù)大小
        //totalUnitCount     文件數(shù)據(jù)的中大小
        NSLog(@"%f",1.0 *downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
        
    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
        
        NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:response.suggestedFilename];
        
        NSLog(@"targetPath:%@",targetPath);
        NSLog(@"fullPath:%@",fullPath);
        
        return [NSURL fileURLWithPath:fullPath];
    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
        
        NSLog(@"%@",filePath);
    }];
    
    //3.執(zhí)行Task
    [download resume];

執(zhí)行上面的代碼就可以實(shí)現(xiàn)基本的網(wǎng)絡(luò)下載數(shù)據(jù) 物臂。

上面說完AFNetworking的文件下載,我們再說一下文件上傳产上。下面上代碼棵磷!

這種方法不推薦,下面另外會介紹幾種不一樣的方法晋涣!

  //    這種方法不推薦仪媒,再使用的過程中 使用過程中泰繁瑣!  下面會推薦另一種方法谢鹊!    
    //1.創(chuàng)建會話管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    //2.1url
    NSURL *url = [NSURL URLWithString:@"http://168.192.1.18:33322/upload"];
    
    //2.2創(chuàng)建請求對象
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
    //2.3 設(shè)置請求方法
    request.HTTPMethod = @"POST";
    
    //2.4 設(shè)請求頭信息  這個(gè)請求頭信息必須要設(shè)置规丽。
    [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",Kboundary] forHTTPHeaderField:@"Content-Type"];
    
    //3.發(fā)送請求上傳文件
    NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromData:[self getBodyData] progress:^(NSProgress * _Nonnull uploadProgress) {
        NSLog(@"%f",1.0 * uploadProgress.completedUnitCount/ uploadProgress.totalUnitCount);
        
    } completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
       
        NSLog(@"%@",responseObject);
    }];
    
    //4.執(zhí)行task
    [uploadTask resume];

下面是另一種方法進(jìn)行上傳文件

  //1.創(chuàng)建會話管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
//    NSDictionary *dictM = @{}
    //2.發(fā)送post請求上傳文件
    /*
     第一個(gè)參數(shù):請求路徑
     第二個(gè)參數(shù):字典(非文件參數(shù))
     第三個(gè)參數(shù):constructingBodyWithBlock 處理要上傳的文件數(shù)據(jù)
     第四個(gè)參數(shù):進(jìn)度回調(diào)
     第五個(gè)參數(shù):成功回調(diào) responseObject:響應(yīng)體信息
     第六個(gè)參數(shù):失敗回調(diào)
     */
    [manager POST:@"http://168.192.1.18:33322/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        
        UIImage *image = [UIImage imageNamed:@"Snip20160227_128"];
        NSData *imageData = UIImagePNGRepresentation(image);
        
        //使用formData來拼接數(shù)據(jù)
        /*
         第一個(gè)參數(shù):二進(jìn)制數(shù)據(jù) 要上傳的文件參數(shù)
         第二個(gè)參數(shù):服務(wù)器規(guī)定的
         第三個(gè)參數(shù):該文件上傳到服務(wù)器以什么名稱保存
         */
        //[formData appendPartWithFileData:imageData name:@"file" fileName:@"xxxx.png" mimeType:@"image/png"];
        
        //[formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/Da/Desktop/Snip20160227_128.png"] name:@"file" fileName:@"123.png" mimeType:@"image/png" error:nil];
        
        [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/xiaomage/Desktop/Snip20160227_128.png"] name:@"file" error:nil];
        
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        
        NSLog(@"%f",1.0 * uploadProgress.completedUnitCount/uploadProgress.totalUnitCount);
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"上傳成功---%@",responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"上傳失敗---%@",error);
    }];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市撇贺,隨后出現(xiàn)的幾起案子赌莺,更是在濱河造成了極大的恐慌,老刑警劉巖松嘶,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件艘狭,死亡現(xiàn)場離奇詭異,居然都是意外死亡翠订,警方通過查閱死者的電腦和手機(jī)巢音,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尽超,“玉大人官撼,你說我怎么就攤上這事∷扑” “怎么了傲绣?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長巩踏。 經(jīng)常有香客問我秃诵,道長,這世上最難降的妖魔是什么塞琼? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任菠净,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毅往。我一直安慰自己牵咙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布攀唯。 她就那樣靜靜地躺著霜大,像睡著了一般。 火紅的嫁衣襯著肌膚如雪革答。 梳的紋絲不亂的頭發(fā)上战坤,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機(jī)與錄音残拐,去河邊找鬼途茫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛溪食,可吹牛的內(nèi)容都是我干的囊卜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼错沃,長吁一口氣:“原來是場噩夢啊……” “哼栅组!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起枢析,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤玉掸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后醒叁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體司浪,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年把沼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了啊易。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饮睬,死狀恐怖租谈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捆愁,我是刑警寧澤割去,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站牙瓢,受9級特大地震影響劫拗,放射性物質(zhì)發(fā)生泄漏间校。R本人自食惡果不足惜矾克,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望憔足。 院中可真熱鬧胁附,春花似錦酒繁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至弓候,卻和暖如春郎哭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背菇存。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工夸研, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人依鸥。 一個(gè)月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓亥至,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贱迟。 傳聞我的和親對象是個(gè)殘疾皇子姐扮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,789評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)衣吠,斷路器茶敏,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件缚俏、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 那對羊角辮 垂下來的調(diào)皮 撓著小書包上的喜羊羊 好象就在幼稚園門口 甩開打傘的手 沖進(jìn)歡快的校園 決絕得理所當(dāng)然的...
    泓宸閱讀 301評論 3 6
  • 踐行的第14天睡榆,巧遇春光和煦的周末后频,和一眾隊(duì)友繼續(xù)邂逅Yarra River揮灑汗水宙拉,線下面對面的好處就是真實(shí)魄衅,兩...
    Maple_鄭小波閱讀 288評論 6 3