「OC」AFNetworking的简单使用
前言
在我们进行网络申请的时候,直接使用OC之中自带的NSURL、NSURLRequest、NSURLSession进行相关操作,还需要实现Task回调、调用resume。那对我们进行开发来说还是相对比较繁琐的,为了简化我们的网络请求,我们其实可以直接使用AFNetworking这个第三方库进行网络请求的操作(下文简称AFN)。
介绍
我们先来对AFNetworking的核心组件进行介绍
AFHTTPSessionManager:基于 NSURLSession 的管理类,用于发送网络请求和处理响应。AFHTTPSessionManager 是最常用的类,用于处理 HTTP 请求。
AFURLSessionManager:基于 NSURLSession,用于管理下载、上传等任务。
AFNetworkReachabilityManager:用于监控网络状态的变化。
处理响应格式
AFNetworking 可以自动解析响应的数据格式,常用的解析格式有 JSON、XML、和图片。
-
JSON 响应: 默认情况下,
AFHTTPSessionManager会将服务器返回的 JSON 自动解析为字典或数组。manager.responseSerializer = [AFJSONResponseSerializer serializer]; -
XML 响应: 如果你的服务器返回 XML,你可以使用
AFXMLParserResponseSerializer。manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; -
图片下载: AFNetworking 也支持图片下载,并且可以设置下载的图片缓存。
manager.responseSerializer = [AFImageResponseSerializer serializer];
进行简单的GET操作
我们以天气预报的信息申请为例子,如果使用OC之中原生的网络请求,代码大致如下
// 用 NSString 创建 URL
NSString *urlString = @"https://devapi.qweather.com/v7/weather/now?location=101110101&key=487fcdf6fdc9401da0ac4c4df535f43d";
NSURL *url = [NSURL URLWithString:urlString];
// 创建 URLSession 对象
NSURLSession *session = [NSURLSession sharedSession];
// 创建 URLRequest 对其进行相关请求,这里使用 GET 方法
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 根据会话创建任务
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
//用block实现回调,处理接受的参数
if (error) {
NSLog(@"错误: %@", error);
return;
}
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
if (httpResponse.statusCode >= 200 && httpResponse.statusCode < 300) {
NSError *jsonError;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];
if (jsonError) {
NSLog(@"解析失败: %@", jsonError);
} else {
NSLog(@"数据如下: %@", json);
// 在这里处理返回的数据
}
} else {
NSLog(@"非法响应: %ld", (long)httpResponse.statusCode);
}
}];
// 启动任务
[task resume];
如果我们引入AFNetworking库,那么代码就会被简化为以下内容
// 导入 AFNetworking
#import <AFNetworking/AFNetworking.h>

最低0.47元/天 解锁文章
1661

被折叠的 条评论
为什么被折叠?



