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

AFN內(nèi)部結(jié)構(gòu)

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

2. AFN的基本使用

  1. 發(fā)送GET請求的兩種方式(POST同)
-(void)get1{ 
//1.創(chuàng)建AFHTTPRequestOperationManager管理者 
//AFHTTPRequestOperationManager內(nèi)部是基于NSURLConnection實現(xiàn)的 
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
//2.發(fā)送請求 
/* 
http://120.25.226.186:32812/login?username=ee&pwd=ee&type=JSON 
第一個參數(shù):NSString類型的請求路徑,AFN內(nèi)部會自動將該路徑包裝為一個url并創(chuàng)建請求對象 
第二個參數(shù):請求參數(shù),以字典的方式傳遞,AFN內(nèi)部會判斷當(dāng)前是POST請求還是GET請求,以選擇直接拼接還是轉(zhuǎn)換為NSData放到請求體中傳遞 
第三個參數(shù):請求成功之后回調(diào)Block 
第四個參數(shù):請求失敗回調(diào)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內(nèi)部是基于NSURLSession實現(xiàn)的 
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
//2.發(fā)送請求 
NSDictionary *param = @{ @"username":@"520it",
                            @"pwd":@"520it" 
                           }; 
//注意:responseObject:請求成功返回的響應(yīng)結(jié)果(AFN內(nèi)部已經(jīng)把響應(yīng)體轉(zhuǎn)換為OC對象,通常是字典或數(shù)組) 
[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.下載文件 
/* 
第一個參數(shù):請求對象 
第二個參數(shù):下載進(jìn)度 
第三個參數(shù):block回調(diào),需要返回一個url地址,用來告訴AFN下載文件的目標(biāo)地址 
targetPath:AFN內(nèi)部下載文件存儲的地址,tmp文件夾下 
response:請求的響應(yīng)頭 
返回值:文件應(yīng)該剪切到什么地方 
第四個參數(shù):block回調(diào),當(dāng)文件下載完成之后調(diào)用 
response:響應(yīng)頭 
filePath:文件存儲在沙盒的地址 == 第三個參數(shù)中block的返回值 
error:錯誤信息 
*/ 
//2.1 創(chuàng)建請求對象 
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"url字符串"]];
//2.2 創(chuàng)建下載進(jìn)度,并監(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)聽下載進(jìn)度 
[progress addObserver:self forKeyPath:@"completedUnitCount" options:NSKeyValueObservingOptionNew context:nil]; 
//3.啟動任務(wù) [downloadTask resume];
}
//獲取并計算當(dāng)前文件的下載進(jìn)度
-(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);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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