afn原理 ios_iOS中AFN的基本使用
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的基本使用相关推荐
- afn原理 ios_iOS开发:AFN的基本使用
因为项目中需要用到一些第三方框架来搞定基本需求,再次总结一番.我的项目是浏览器工具,所以对网络请求处理需要做很多特别处理,这也就构成了对AFN及ASI库的深究; 1.AFN全称为:AFNetWorki ...
- afn原理 ios_iOS AFNetworking网络框架详解
导语: 众所周知,AFNetworking是目前IOS开发中非常受欢迎的第三方网络通信类库,同时AFNetworking对苹果官方NSURLConnection和NSURLSession进行了封装,使 ...
- afn原理 ios_IOS开发入门之iOS面试题- AFN2.x为什么添加一条常驻线程?
本文将带你了解IOS开发入门iOS面试题- AFN2.x为什么添加一条常驻线程?,希望本文对大家学IOS有所帮助. 1.AFN2.x为什么添加一条常驻线程? AFN2.0里面把每一个网络请求的发起和解 ...
- afn原理 ios_iOS AFN实现原理
AFNetworking是封装的NSURLSession的网络请求 AFNetworking由五个模块组成: 分别由NSURLSession,Security,Reachability,Seriali ...
- 色彩(颜色)空间原理(中)
色彩(颜色)空间原理(中) 颜色的线性变换 现在我们知道如何定义RGB颜色空间,以及如何使用伽玛曲线在线性和伽玛校正值之间进行转换.剩下的最后一步是将线性RGB颜色转换为XYZ颜色.一旦进入XYZ空间 ...
- 摄像头ISP系统原理(中)
摄像头ISP系统原理(中) · AF(FOCUS)----自动对焦 根据光学知识,景物在传感器上成像最清晰时处于合焦平面上.通过更改 LENS 的位置,使得景物在传感器上清晰的成像,是 ISP FOC ...
- Altium designer原理图库中元件变动后在原理图中同步更新方法
AD原理图库中元件变动后在原理图中同步更新 在原理图中选择Tools–>Update from libraries 接下来选中需要更改的器件–>next 勾选上对应需要修改的料号,点击Fi ...
- 电压源和电流的关联参考方向_在大学《电路原理》中,电流源和电压源如何判断关联参考方向和非关联参考方向?...
问题:在大学<电路原理>中,电流源和电压源如何判断关联参考方向和非关联参考方向? 说明:这是<电路原理>的基本概念,是一个简单的概念,但也是容易被绕进去的概念,各类教材没有特别 ...
- 【Docker镜像文件加载原理生产中重新制作并提交镜像文件案例演示】
一.知识回顾 之前的内容都帮你整理好了,在这里哟! [0.Docker相关目录文章整理,可自行查看,包含多节内容] [1.Docker详细安装部署&阿里镜像地址配置] [2.Docker架构& ...
最新文章
- APP测试入门之性能测试
- 深入理解java的泛型
- IDEA无法通过类加载器获取resources文件夹配置文件解决办法
- 学习 Message(3): 响应 WM_LBUTTONDOWN 消息
- 不学Python的同学,“跳一跳”都输了
- 深度学习 《BiRNN》
- 16、React系列之 React 路由
- pytroch model??(查看官方模型写法)
- [转载]直接保存Matlab图像到PPT文件
- Linux中级之lvs三个模式的图像补充(nat,dr,tun)
- HDFS的shell命令
- mellanox在vmware中的切割
- mysql 未找到 WinSxS_清理WinSxs释放 Win7 C盘所占的空间
- JIAR 使用笔记 - 素材
- 新日+苏宁O2O,电动车市迎来智慧零售新时代
- C#根据当前时间获取周,月,季度,年度等时间段的起止时间
- java分词支持拼音_java 支持分词的高性能拼音转换工具,速度是 pinyin4j
- 精读《对 Markdown 的思考》
- iphone android互传文件夹,堪比隔空投送!iPhone和安卓、PC互传文件的3种方法,建议收藏...
- Sentinel 流控(限流)
热门文章
- 欧盟数字市场负责人:大科技公司垄断令人担忧
- 图的十字链表存储法详解
- html5向下兼容的意思,什么是兼容?什么是向上兼容?什么是向下兼容?
- 用python绘制散点图适用于通过读取txt的数据进行绘制
- 跳过51单片机,直接学习STM32单片机怎么样?
- 标准linu休眠和唤醒机制分析(二)
- 【jumpserver升级】docker pulling image报错dial tcp 104.18.124.25:443: i/o timeout
- python中魔法方法repr_python中魔法方法__str__与__repr__的区别
- 惩罚性赔偿金是根据什么来定的
- 第9/9课:敏捷专题讲解【41-47】-科科过PMP