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

}];

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值