AFN常用类

AFHTTPSessionManager//管理者发送请求

AFNetworkReachabilityManager//网络监测

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请求

//创建管理者

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

网络监测

//检测网络状态

- (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];

}

上传图片案例演示向服务器上传多张图片的工具类

- (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原理 ios_iOS中AFN的基本使用相关推荐

  1. afn原理 ios_iOS开发:AFN的基本使用

    因为项目中需要用到一些第三方框架来搞定基本需求,再次总结一番.我的项目是浏览器工具,所以对网络请求处理需要做很多特别处理,这也就构成了对AFN及ASI库的深究; 1.AFN全称为:AFNetWorki ...

  2. afn原理 ios_iOS AFNetworking网络框架详解

    导语: 众所周知,AFNetworking是目前IOS开发中非常受欢迎的第三方网络通信类库,同时AFNetworking对苹果官方NSURLConnection和NSURLSession进行了封装,使 ...

  3. afn原理 ios_IOS开发入门之iOS面试题- AFN2.x为什么添加一条常驻线程?

    本文将带你了解IOS开发入门iOS面试题- AFN2.x为什么添加一条常驻线程?,希望本文对大家学IOS有所帮助. 1.AFN2.x为什么添加一条常驻线程? AFN2.0里面把每一个网络请求的发起和解 ...

  4. afn原理 ios_iOS AFN实现原理

    AFNetworking是封装的NSURLSession的网络请求 AFNetworking由五个模块组成: 分别由NSURLSession,Security,Reachability,Seriali ...

  5. 色彩(颜色)空间原理(中)

    色彩(颜色)空间原理(中) 颜色的线性变换 现在我们知道如何定义RGB颜色空间,以及如何使用伽玛曲线在线性和伽玛校正值之间进行转换.剩下的最后一步是将线性RGB颜色转换为XYZ颜色.一旦进入XYZ空间 ...

  6. 摄像头ISP系统原理(中)

    摄像头ISP系统原理(中) · AF(FOCUS)----自动对焦 根据光学知识,景物在传感器上成像最清晰时处于合焦平面上.通过更改 LENS 的位置,使得景物在传感器上清晰的成像,是 ISP FOC ...

  7. Altium designer原理图库中元件变动后在原理图中同步更新方法

    AD原理图库中元件变动后在原理图中同步更新 在原理图中选择Tools–>Update from libraries 接下来选中需要更改的器件–>next 勾选上对应需要修改的料号,点击Fi ...

  8. 电压源和电流的关联参考方向_在大学《电路原理》中,电流源和电压源如何判断关联参考方向和非关联参考方向?...

    问题:在大学<电路原理>中,电流源和电压源如何判断关联参考方向和非关联参考方向? 说明:这是<电路原理>的基本概念,是一个简单的概念,但也是容易被绕进去的概念,各类教材没有特别 ...

  9. 【Docker镜像文件加载原理生产中重新制作并提交镜像文件案例演示】

    一.知识回顾 之前的内容都帮你整理好了,在这里哟! [0.Docker相关目录文章整理,可自行查看,包含多节内容] [1.Docker详细安装部署&阿里镜像地址配置] [2.Docker架构& ...

最新文章

  1. APP测试入门之性能测试
  2. 深入理解java的泛型
  3. IDEA无法通过类加载器获取resources文件夹配置文件解决办法
  4. 学习 Message(3): 响应 WM_LBUTTONDOWN 消息
  5. 不学Python的同学,“跳一跳”都输了
  6. 深度学习 《BiRNN》
  7. 16、React系列之 React 路由
  8. pytroch model??(查看官方模型写法)
  9. [转载]直接保存Matlab图像到PPT文件
  10. Linux中级之lvs三个模式的图像补充(nat,dr,tun)
  11. HDFS的shell命令
  12. mellanox在vmware中的切割
  13. mysql 未找到 WinSxS_清理WinSxs释放 Win7 C盘所占的空间
  14. JIAR 使用笔记 - 素材
  15. 新日+苏宁O2O,电动车市迎来智慧零售新时代
  16. C#根据当前时间获取周,月,季度,年度等时间段的起止时间
  17. java分词支持拼音_java 支持分词的高性能拼音转换工具,速度是 pinyin4j
  18. 精读《对 Markdown 的思考》
  19. iphone android互传文件夹,堪比隔空投送!iPhone和安卓、PC互传文件的3种方法,建议收藏...
  20. Sentinel 流控(限流)

热门文章

  1. 欧盟数字市场负责人:大科技公司垄断令人担忧
  2. 图的十字链表存储法详解
  3. html5向下兼容的意思,什么是兼容?什么是向上兼容?什么是向下兼容?
  4. 用python绘制散点图适用于通过读取txt的数据进行绘制
  5. 跳过51单片机,直接学习STM32单片机怎么样?
  6. 标准linu休眠和唤醒机制分析(二)
  7. 【jumpserver升级】docker pulling image报错dial tcp 104.18.124.25:443: i/o timeout
  8. python中魔法方法repr_python中魔法方法__str__与__repr__的区别
  9. 惩罚性赔偿金是根据什么来定的
  10. 第9/9课:敏捷专题讲解【41-47】-科科过PMP