iOS開發(fā)--AFN框架基本使用

AFN內部結構

  1. AFN結構體
  • NSURLConnection
    • AFURLConnectionOperation
    • AFHTTPRequestOperation
    • AFHTTPRequestOperationManager(封裝了常用的 HTTP 方法)
      • 屬性
        • baseURL :AFN建議開發(fā)者針對 AFHTTPRequestOperationManager 自定義個一個單例子類,設置 baseURL, 所有的網絡訪問,都只使用相對路徑即可
        • requestSerializer :請求數據格式/默認是二進制的 HTTP
        • responseSerializer :響應的數據格式/默認是 JSON 格式
        • operationQueue
        • reachabilityManager :網絡連接管理器
      • 方法
        • manager :方便創(chuàng)建管理器的類方法
        • HTTPRequestOperationWithRequest :在訪問服務器時,如果要告訴服務器一些附加信息,都需要在 Request 中設置
        • GET
        • POST
  • NSURLSession
    • AFURLSessionManager
    • AFHTTPSessionManager(封裝了常用的 HTTP 方法)
      • GET
      • POST
      • UIKit + AFNetworking 分類
      • NSProgress :利用KVO
  • 半自動的序列化&反序列化的功能
    • AFURLRequestSerialization :請求的數據格式/默認是二進制的
    • AFURLResponseSerialization :響應的數據格式/默認是JSON格式
  • 附加功能
    • 安全策略
      • HTTPS
      • AFSecurityPolicy
    • 網絡檢測
      • 對蘋果的網絡連接檢測做了一個封裝
      • AFNetworkReachabilityManager

2. AFN的基本使用

  1. 發(fā)送GET請求的兩種方式(POST同)
-(void)get1{ 
//1.創(chuàng)建AFHTTPRequestOperationManager管理者 
//AFHTTPRequestOperationManager內部是基于NSURLConnection實現的 
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
//2.發(fā)送請求 
/* 
http://120.25.226.186:32812/login?username=ee&pwd=ee&type=JSON 
第一個參數:NSString類型的請求路徑,AFN內部會自動將該路徑包裝為一個url并創(chuàng)建請求對象 
第二個參數:請求參數,以字典的方式傳遞,AFN內部會判斷當前是POST請求還是GET請求,以選擇直接拼接還是轉換為NSData放到請求體中傳遞 
第三個參數:請求成功之后回調Block 
第四個參數:請求失敗回調Block 
*/ 
NSDictionary *param = @{ @"username":@"520it", 
                            @"pwd":@"520it" 
                           }; 
//注意:字符串中不能包含空格 
[manager GET:@"url字符串" parameters:param success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
 NSLog(@"請求成功---%@",responseObject); 
} failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {
 NSLog(@"失敗---%@",error); 
}];
}
-(void)get2{ 
//1.創(chuàng)建AFHTTPSessionManager管理者 
//AFHTTPSessionManager內部是基于NSURLSession實現的 
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
//2.發(fā)送請求 
NSDictionary *param = @{ @"username":@"520it",
                            @"pwd":@"520it" 
                           }; 
//注意:responseObject:請求成功返回的響應結果(AFN內部已經把響應體轉換為OC對象,通常是字典或數組) 
[manager GET:@"url字符串" parameters:param success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
 NSLog(@"請求成功---%@",[responseObject class]); 
} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
 NSLog(@"失敗---%@",error);
 }];
}
  1. 使用AFN下載文件
-(void)download{ 
//1.創(chuàng)建一個管理者 
AFHTTPSessionManager *manage = [AFHTTPSessionManager manager]; 
//2.下載文件 
/* 
第一個參數:請求對象 
第二個參數:下載進度 
第三個參數:block回調,需要返回一個url地址,用來告訴AFN下載文件的目標地址 
targetPath:AFN內部下載文件存儲的地址,tmp文件夾下 
response:請求的響應頭 
返回值:文件應該剪切到什么地方 
第四個參數:block回調,當文件下載完成之后調用 
response:響應頭 
filePath:文件存儲在沙盒的地址 == 第三個參數中block的返回值 
error:錯誤信息 
*/ 
//2.1 創(chuàng)建請求對象 
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"url字符串"]];
//2.2 創(chuàng)建下載進度,并監(jiān)聽 
NSProgress *progress = nil; 
NSURLSessionDownloadTask *downloadTask = [manage downloadTaskWithRequest:request progress:&progress destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { 
NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; 
//拼接文件全路徑 
NSString *fullpath = [caches stringByAppendingPathComponent:response.suggestedFilename]; 
NSURL *filePathUrl = [NSURL fileURLWithPath:fullpath]; 
return filePathUrl; 
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nonnull filePath, NSError * _Nonnull error) { 
NSLog(@"文件下載完畢---%@",filePath); 
}]; 
//2.3 使用KVO監(jiān)聽下載進度 
[progress addObserver:self forKeyPath:@"completedUnitCount" options:NSKeyValueObservingOptionNew context:nil]; 
//3.啟動任務 [downloadTask resume];
}
//獲取并計算當前文件的下載進度
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(NSProgress *)progress change:(NSDictionary<NSString *,id> *)change context:(void *)context{ 
NSLog(@"%zd--%zd--%f",progress.completedUnitCount,progress.totalUnitCount,1.0 * progress.completedUnitCount/progress.totalUnitCount);
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,283評論 6 530
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 97,947評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,094評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,485評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,268評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,817評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,906評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,039評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 48,551評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,502評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,662評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,188評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,907評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,304評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,563評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,255評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,637評論 2 370

推薦閱讀更多精彩內容

  • 1.AFN框架基本使用 1 AFN內部結構AFN結構體NSURLConnection(iOS9.0廢棄了)AFUR...
    smile麗語閱讀 3,495評論 4 46
  • 第三方庫使用總結 ①SDWebImage(修改ARC,Build Phases→搜索框內輸入sd首字母即可(五個....
    WSGNSLog閱讀 328評論 0 0
  • AFNetWorking的介紹 分享一個很詳細的總結 www.cocoachina.com/ios/2016120...
    Phaemlo閱讀 739評論 0 0
  • 全稱是AFNetworking,是對NSURLSession的一層封裝 雖然運行效率沒有ASI高,但是使用比ASI...
    翻這個墻閱讀 1,050評論 7 4
  • AFN什么是AFN全稱是AFNetworking,是對NSURLConnection、NSURLSession的一...
    醉葉惜秋閱讀 1,217評論 0 0