【iOS】AFNetworking初步了解及使用
文章目录
- 前言
- 网络请求
- 原生请求
- 用AFNetworking库进行网络请求
- 代码示例
- 运行结果
- 总结
前言
之前我们在暑假的天气预报项目中简单使用过苹果原生NSURLSession有关网络请求的内容,但是只是最基础的使用且用起来比较麻烦,于是学习了使用AFNetworking库(即一个第三方库,需要使用cocoapods进行导入)进行网络请求,在下面予以总结
网络请求
原生请求
在iOS原生的系统中,网络请求一般要进行以下五步:
- 创建请求地址
- 创建请求类
- 创建对话
- 创建任务
- 启动任务
下面是之前在天气预报中部分的网络请求代码
//创建请求地址,构建并准备好目标URL
NSString *urlString = [NSString stringWithFormat:@"https://api.weatherapi.com/v1/forecast.json?key=3557d02150d248e6b0735224252907&q=%@&days=7", city];urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]NSURL *url = [NSURL URLWithString:urlString];
//创建一个NSURLRequest的请求对象NSURLRequest *request = [NSURLRequest requestWithURL:url];
//创建管理网络任务的会话容器NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];//创建网络任务并准备数据容器
self.responseData = [[NSMutableData alloc] init];NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request];
//启动任务[dataTask resume];
用AFNetworking库进行网络请求
在使用这个第三方库时,也是首先要用的cocoapods进行导入,并在代码中写上头文件#import <AFNetworking/AFNetworking.h>进行导入,主要步骤如下
- 创建管理器
- 设置请求的参数
- 发起get请求
- 据请求结果判断处理请求成功与失败的数据
- 更新数据之类的操作
代码示例
#import "ViewController.h"
#import <AFNetworking/AFNetworking.h>@interface ViewController ()
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];[self LoadWeatherData];
}- (void)LoadWeatherData {// 创建网络管理器AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];// 设置请求参数NSDictionary *params = @{@"key": @"3557d02150d248e6b0735224252907",@"q": @"西安",@"days": @"1"};// 发起GET请求[manager GET:@"https://api.weatherapi.com/v1/forecast.json"parameters:paramsheaders:nilprogress:nilsuccess:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {// 请求成功 - 打印数据NSLog(@"请求成功!");NSLog(@"完整响应数据: %@", responseObject);// 提取一些具体信息打印if ([responseObject isKindOfClass:[NSDictionary class]]) {NSDictionary *location = responseObject[@"location"];NSDictionary *current = responseObject[@"current"];NSLog(@"城市: %@", location[@"name"]);NSLog(@"温度: %.1f°C", [current[@"temp_c"] floatValue]);NSLog(@"天气: %@", current[@"condition"][@"text"]);}} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {// 请求失败 - 打印错误NSLog(@"请求失败: %@", error.localizedDescription);}];
}
@end
运行结果
GET方法请求数据几个参数的作用:
- GET:是存放我们的URL,也就是我们的网络请求的地址。
- parameters:参数则是我们要发送的请求的查询数据,在get请求中我们一般放在URL中间,这里注意下在POST请求,我们需要使用一个字典来进行一个请求。
- header(HTTP请求头):在大部分请求中我们是不需要的,但是在部分要求比较严格的API中,可能就需要运用到这个参数
- progress:是一个可以选择的块,一般用于大文件的下载中,success则是请求成功后回调块,failure则是请求失败后的回调块
总结
这里只是简单介绍了AFNetworking的用法,后面还会讲出与YYModel和单例模式一起使用的更多用法