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]);
}];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容