浅谈AFN的使用

AFN作为网络处理第三方的老大地位,我就不赘述了,直接说使用,以下是所包含的四个类。

  • AFHTTPSessionManager管理者发送请求
  • AFNetworkReachabilityManager网络监测
  • ADSecurityPlicyhttps
  • AFURLResponseSeralization
    ==演示==
    AFN中的get和post请求
  • get请求
//创建请求
AFHTTPSessionManger *manger = [AFHTTPSession manger];
//修改block的线程
manager.completionQueue = dispatch_get_global_queue;
NSDictionary *parma = @{@"name":@"xiaoxinxin",@"age":@18};
//发送请求
manager GET:@"" parameters:nil progress:nil success:^{
//默认在主线程执行
NSLog(@"%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
}fileure^{
NSLog(@"%@",[error localizedDescription]);
}

==使用注意==
* AFN发送的所有请求都是异步,不会阻塞主线程
* 默认情况下是JSON解析
* block代码块内容是在get和post请求完成之后才执行
* block默认在主线程执行,如果希望修改代码块在子线程执行如下修改

manager.completionQueue = dispatch_get_global_queue;
  • post请求

      - (void)postDemo {
      //创建管理者
      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
       //更改执行的线程
      manager.completionQueue = dispatch_get_global_queue(0, 0);
      //更改默认请求的发送请求的二进制数据为JSON格式的二进制更改默  认的序列化方式
      manager.requestSerializer = [AFJSONRequestSerializer serializer];
      //更改响应默认的解析方式为字符串解析
      manager.responseSerializer = [AFHTTPResponseSerializer serializer];
      //参数
       NSDictionary *parma = @{@"name":@"xiaoxinxin,@"age":@18};
      //发送数据
      [manager POST:@"http://192.168.23.7/post/postjson.php"  parameters:parma progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id_Nullable responseObject) {
      //默认在主线程执行
      NSLog(@"%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
      } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _ Nonnull error) {
      NSLog(@"%@",[error localizedDescription]);
      }];
    

}

**请求的序列化和反序列化**
* AFN可以把OC对象转成三种方式的二进制,请求的普通二进制(默认的)
* 解析二进制默认是JSON
==AFN的BaseURL==
* 区分测试模式和正式模式
** AFN文件上传与网络监测 **
* 网络监测

//检测网络状态

  • (void)reachAbility {
    //创建一个单例manager
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    //监测网络状态改变
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    switch (status) {
    case AFNetworkReachabilityStatusUnknown:
    NSLog(@"没有网络");
    break;
    case AFNetworkReachabilityStatusNotReachable:
    NSLog(@"连接到路由器网络不能到达");
    break;
    case AFNetworkReachabilityStatusReachableViaWWAN:
    NSLog(@"2G/3G/4G");
    break;
    case AFNetworkReachabilityStatusReachableViaWiFi:
    NSLog(@"wifi");
    break;
    }
    }];
    //开启检测
    [manager startMonitoring];
    }
**上传图片案例演示**[向服务器上传多张图片的工具类](https://github.com/giveMeHug)
  • (IBAction)selectPhotos:(id)sender {
    //创建图片多选控制器
    ZLPhotoPickerViewController *pickerVc = [[ZLPhotoPickerViewController alloc] init];
    //默认显示相册里面的内容SavePhotos
    pickerVc.status = PickerViewShowStatusSavePhotos;
    //选择图片的最小数,默认是9张图片最大也是9张
    pickerVc.maxCount = 4;
    [self presentViewController:pickerVc animated:YES completion:nil];
    // block回调或者代理
    //用block来代替代理
    __weak typeof(self) weakSelf = self;
    pickerVc.callBack = ^(NSArray *assets){
    for (ZLPhotoAssets *photoAsset in assets) {
    //将图片改成二进制
    NSData *data = UIImagePNGRepresentation(photoAsset.originImage);
    //给图片起名字
    NSString *filename = [NSString stringWithFormat:@"%d.png",arc4random_uniform(100)];
    //保存图片到字典中
    [weakSelf.fileDict setObject:data forKey:filename];
    }
    };
    }
  • (IBAction)uploadFile:(id)sender {
    //创建一个管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //需要传入的参数
    NSDictionary *parma = @{
    @"status":@"upload succees"
    };
    //修改默认的二进制的传输类型为JSON格式的二进制
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    //发送请求
    [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) {
    //拼接文件参数拼接在formdata后面
    //第一个参数:文件的二进制
    //第二个参数:后台接收的字段名userfile[]
    /第三个参数:保存起来的名字saveFileName
    [formData appendPartWithFileData:imageData name:@"userfile[]" fileName:saveFiledname mimeType:@"image/png"];
    }];
    } success:^(NSURLSessionDataTask * _Nonnull task, id_Nullable responseObject) {
    //打印服务器返回的参数
    NSLog(@"%@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    //打印错误信息
    NSLog(@"%@",[error localizedDescription]);
    }];
    }
AFN上传数据的方法appendPartWithFileData:
  • (void)appendPartWithFileData:(NSData *)data
    name:(NSString *)name
    fileName:(NSString *)fileName
    mimeType:(NSString *)mimeType;
    //参数1:fileData:需要上传的文件的二进制,如果是多文件,fileData指的是每一个文件的二进制
    //参数2:name:服务器用来接收传入数据的字段名
    //参数3:保存到服务器上的名字
    //参数:标记上传的数据的格式如image/png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,841评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,415评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,904评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,051评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,055评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,255评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,729评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,377评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,517评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,420评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,467评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,144评论 3 317
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,735评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,812评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,029评论 1 256
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,528评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,126评论 2 341

推荐阅读更多精彩内容

  • AFNetWorking的介绍 分享一个很详细的总结 www.cocoachina.com/ios/2016120...
    Phaemlo阅读 719评论 0 0
  • 1.在开发的时候可以创建一个工具类,继承自我们的AFN中的请求管理者,再控制器中真正发请求的代码使用自己封装的工具...
    红楼那一场梦阅读 3,466评论 2 3
  • 1.AFN使用技巧 1.在开发的时候可以创建一个工具类,继承自我们的AFN中的请求管理者,再控制器中真正发请求的代...
    YSL一路行走阅读 1,215评论 1 3
  • 全称是AFNetworking,是对NSURLSession的一层封装 虽然运行效率没有ASI高,但是使用比ASI...
    翻这个墙阅读 1,030评论 7 4
  • 网络解析:AFNnetworking详解 一、什么事AFN□在iOS开发中,使用比较广泛□全称是AFNetwork...
    Bo_cake阅读 858评论 0 1