淺談AFN的使用

AFN作為網(wǎng)絡(luò)處理第三方的老大地位,我就不贅述了,直接說使用,以下是所包含的四個類。

  • AFHTTPSessionManager管理者發(fā)送請求
  • AFNetworkReachabilityManager網(wǎng)絡(luò)監(jiān)測
  • ADSecurityPlicyhttps
  • AFURLResponseSeralization
    ==演示==
    AFN中的get和post請求
  • get請求
//創(chuàng)建請求
AFHTTPSessionManger *manger = [AFHTTPSession manger];
//修改block的線程
manager.completionQueue = dispatch_get_global_queue;
NSDictionary *parma = @{@"name":@"xiaoxinxin",@"age":@18};
//發(fā)送請求
manager GET:@"" parameters:nil progress:nil success:^{
//默認(rèn)在主線程執(zhí)行
NSLog(@"%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
}fileure^{
NSLog(@"%@",[error localizedDescription]);
}

==使用注意==
* AFN發(fā)送的所有請求都是異步,不會阻塞主線程
* 默認(rèn)情況下是JSON解析
* block代碼塊內(nèi)容是在get和post請求完成之后才執(zhí)行
* block默認(rèn)在主線程執(zhí)行,如果希望修改代碼塊在子線程執(zhí)行如下修改

manager.completionQueue = dispatch_get_global_queue;
  • post請求

      - (void)postDemo {
      //創(chuàng)建管理者
      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
       //更改執(zhí)行的線程
      manager.completionQueue = dispatch_get_global_queue(0, 0);
      //更改默認(rèn)請求的發(fā)送請求的二進(jìn)制數(shù)據(jù)為JSON格式的二進(jìn)制更改默  認(rèn)的序列化方式
      manager.requestSerializer = [AFJSONRequestSerializer serializer];
      //更改響應(yīng)默認(rèn)的解析方式為字符串解析
      manager.responseSerializer = [AFHTTPResponseSerializer serializer];
      //參數(shù)
       NSDictionary *parma = @{@"name":@"xiaoxinxin,@"age":@18};
      //發(fā)送數(shù)據(jù)
      [manager POST:@"http://192.168.23.7/post/postjson.php"  parameters:parma progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id_Nullable responseObject) {
      //默認(rèn)在主線程執(zhí)行
      NSLog(@"%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
      } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _ Nonnull error) {
      NSLog(@"%@",[error localizedDescription]);
      }];
    

}

**請求的序列化和反序列化**
* AFN可以把OC對象轉(zhuǎn)成三種方式的二進(jìn)制,請求的普通二進(jìn)制(默認(rèn)的)
* 解析二進(jìn)制默認(rèn)是JSON
==AFN的BaseURL==
* 區(qū)分測試模式和正式模式
** AFN文件上傳與網(wǎng)絡(luò)監(jiān)測 **
* 網(wǎng)絡(luò)監(jiān)測

//檢測網(wǎng)絡(luò)狀態(tài)

  • (void)reachAbility {
    //創(chuàng)建一個單例manager
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    //監(jiān)測網(wǎng)絡(luò)狀態(tài)改變
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    switch (status) {
    case AFNetworkReachabilityStatusUnknown:
    NSLog(@"沒有網(wǎng)絡(luò)");
    break;
    case AFNetworkReachabilityStatusNotReachable:
    NSLog(@"連接到路由器網(wǎng)絡(luò)不能到達(dá)");
    break;
    case AFNetworkReachabilityStatusReachableViaWWAN:
    NSLog(@"2G/3G/4G");
    break;
    case AFNetworkReachabilityStatusReachableViaWiFi:
    NSLog(@"wifi");
    break;
    }
    }];
    //開啟檢測
    [manager startMonitoring];
    }
**上傳圖片案例演示**[向服務(wù)器上傳多張圖片的工具類](https://github.com/giveMeHug)
  • (IBAction)selectPhotos:(id)sender {
    //創(chuàng)建圖片多選控制器
    ZLPhotoPickerViewController *pickerVc = [[ZLPhotoPickerViewController alloc] init];
    //默認(rèn)顯示相冊里面的內(nèi)容SavePhotos
    pickerVc.status = PickerViewShowStatusSavePhotos;
    //選擇圖片的最小數(shù),默認(rèn)是9張圖片最大也是9張
    pickerVc.maxCount = 4;
    [self presentViewController:pickerVc animated:YES completion:nil];
    // block回調(diào)或者代理
    //用block來代替代理
    __weak typeof(self) weakSelf = self;
    pickerVc.callBack = ^(NSArray *assets){
    for (ZLPhotoAssets *photoAsset in assets) {
    //將圖片改成二進(jìn)制
    NSData *data = UIImagePNGRepresentation(photoAsset.originImage);
    //給圖片起名字
    NSString *filename = [NSString stringWithFormat:@"%d.png",arc4random_uniform(100)];
    //保存圖片到字典中
    [weakSelf.fileDict setObject:data forKey:filename];
    }
    };
    }
  • (IBAction)uploadFile:(id)sender {
    //創(chuàng)建一個管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //需要傳入的參數(shù)
    NSDictionary *parma = @{
    @"status":@"upload succees"
    };
    //修改默認(rèn)的二進(jìn)制的傳輸類型為JSON格式的二進(jìn)制
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    //發(fā)送請求
    [manager POST:@"http://192.168.23.7/post/upload-m.php" parameters:parma constructingBodyWithBlock:^(id_Nonnull formData) {
    //遍歷字典formdata包括請求體拼接
    [self.fileDict enumerateKeysAndObjectsUsingBlock:^(NSString *saveFiledname,NSData *imageData, BOOL * _Nonnull stop) {
    //拼接文件參數(shù)拼接在formdata后面
    //第一個參數(shù):文件的二進(jìn)制
    //第二個參數(shù):后臺接收的字段名userfile[]
    /第三個參數(shù):保存起來的名字saveFileName
    [formData appendPartWithFileData:imageData name:@"userfile[]" fileName:saveFiledname mimeType:@"image/png"];
    }];
    } success:^(NSURLSessionDataTask * _Nonnull task, id_Nullable responseObject) {
    //打印服務(wù)器返回的參數(shù)
    NSLog(@"%@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    //打印錯誤信息
    NSLog(@"%@",[error localizedDescription]);
    }];
    }
AFN上傳數(shù)據(jù)的方法appendPartWithFileData:
  • (void)appendPartWithFileData:(NSData *)data
    name:(NSString *)name
    fileName:(NSString *)fileName
    mimeType:(NSString *)mimeType;
    //參數(shù)1:fileData:需要上傳的文件的二進(jìn)制,如果是多文件,fileData指的是每一個文件的二進(jìn)制
    //參數(shù)2:name:服務(wù)器用來接收傳入數(shù)據(jù)的字段名
    //參數(shù)3:保存到服務(wù)器上的名字
    //參數(shù):標(biāo)記上傳的數(shù)據(jù)的格式如image/png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • AFNetWorking的介紹 分享一個很詳細(xì)的總結(jié) www.cocoachina.com/ios/2016120...
    Phaemlo閱讀 810評論 0 0
  • 1.在開發(fā)的時候可以創(chuàng)建一個工具類,繼承自我們的AFN中的請求管理者,再控制器中真正發(fā)請求的代碼使用自己封裝的工具...
    紅樓那一場夢閱讀 3,628評論 2 3
  • 1.AFN使用技巧 1.在開發(fā)的時候可以創(chuàng)建一個工具類,繼承自我們的AFN中的請求管理者,再控制器中真正發(fā)請求的代...
    YSL一路行走閱讀 1,343評論 1 3
  • 全稱是AFNetworking,是對NSURLSession的一層封裝 雖然運(yùn)行效率沒有ASI高,但是使用比ASI...
    翻這個墻閱讀 1,100評論 7 4
  • 網(wǎng)絡(luò)解析:AFNnetworking詳解 一、什么事AFN□在iOS開發(fā)中,使用比較廣泛□全稱是AFNetwork...
    Bo_cake閱讀 958評論 0 1

友情鏈接更多精彩內(nèi)容