AFNetworking是iOS中最常用的网络通信框架之一。它被广泛用于iOS应用程序的网络通信模块,提供了比NSURLConnection更强大的功能和更简便的API。在这篇文章中,我们将深入介绍AFNetworking的作用、使用方法以及在实际开发中的案例说明。
一.AFNetworking的作用
AFNetworking具有以下主要功能:
1.提供了比NSURLConnection更强大的功能。
AFNetworking通过提供高层次的API,使得开发人员可以更轻松地完成网络通信。你不需要手动创建NSURLConnection对象并实现其委托方法,响应和错误处理。AFNetworking已经为你处理了请求和响应串行化,以及错误处理。
2.SSL Pinning(SSL证书校验)
SSL Pinning(SSL证书校验)是一种安全机制,在使用HTTPS时防止中间人攻击。AFNetworking提供了SSL Pinning的支持,允许你验证服务器的证书。
3.支持RESTful API
RESTful API是基于HTTP协议的设计规范。AFNetworking能够轻松地支持RESTful API的设计,提供了快速、方便的API来处理HTTP方法,如GET、POST、PUT、DELETE等。
4.易于扩展
AFNetworking允许你编写自己的HTTP请求操作,以便于扩展AFNetworking的功能,包括使用自定义URL协议或其他协议来处理请求。同时,AFNetworking充分利用了Objective-C运行时的特性,允许动态替换和注入方法和属性。
二.AFNetworking的使用方法
AFNetworking的使用非常简单,我们只需要三个步骤即可完成网络请求:
1.导入AFNetworking
在项目中导入AFNetworking,你可以使用CocoaPods来管理你的依赖关系,你只需要将以下代码添加到你的Podfile即可:
pod 'AFNetworking'
2.创建请求
AFNetworking提供了多种方法用于处理HTTP请求,包括GET、POST、PUT、DELETE等。创建请求的方法取决于你需要使用的HTTP方法。以下是一个简单的GET请求示例:
```objc
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:@"http://example.com/resources.json"
parameters:nil
progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"JSON: %@", responseObject);
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Error: %@", error);
}];
```
这里的manager对象是AFHTTPSessionManager的实例,是用于管理请求的控制器对象。GET请求由GET方法和URL构成。parameters参数是一个字典,用于设置请求的参数。成功和失败的block用于处理请求的响应和错误。
3.处理响应
你可以使用success block来处理请求的响应,通过调用success block并传递响应对象,使AFNetworking重新配置响应对象。以下是一个简单的JSON解析示例:
```objc
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:@"http://example.com/resources.json"
parameters:nil
progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if ([responseObject isKindOfClass:[NSDictionary class]]) {
NSDictionary *response = (NSDictionary *)responseObject;
// Do something with response
}
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Error: %@", error);
}];
```
这里的responseObject参数表示通过AFNetworking自动解析的响应对象。
三.AFNetworking的案例说明
1.发起GET请求
以下是一个发起GET请求的示例,我们从服务器请求城市列表,并将结果放在一个tableView中显示。
```objc
@interface ViewController () @property (nonatomic,strong) NSMutableArray *tableData; @property (nonatomic,strong) UITableView *tableView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [self createUI]; [self requestData]; } #pragma mark - UI - (void)createUI{ self.tableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain]; self.tableView.delegate = self; self.tableView.dataSource = self; [self.view addSubview:self.tableView]; } #pragma mark - NetWork - (void)requestData{ NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://raw.githubusercontent.com/yakun2016/file/master/city.json"]]; [request setHTTPMethod:@"GET"]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { if (error == nil) { NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; [self.tableData addObjectsFromArray:array]; dispatch_async(dispatch_get_main_queue(), ^{ [self.tableView reloadData]; }); } }]; [task resume]; } #pragma mark - getter - (NSMutableArray *)tableData { if (!_tableData) { _tableData = [NSMutableArray new]; } return _tableData; } #pragma mark - UITableViewDataSource - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.tableData.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *identifier = @"cell"; UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:identifier]; if (!cell) { cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; } NSDictionary *dict = [self.tableData objectAtIndex:indexPath.row]; cell.textLabel.text = [dict objectForKey:@"name"]; return cell; } @end ``` 这里我们使用NSURLSession发起GET请求,将请求到的数据放在了一个数组中并用tableView显示。 2.发起POST请求 以下是一个发起POST请求的示例,我们从服务器请求签到功能,包括签到的日期和城市信息。 ```objc @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [self requestLogin]; } - (void)requestLogin{ NSString *urlStr = @"https://example.com/signin"; NSString *dataStr = [NSString stringWithFormat:@"name=%@&password=%@", @"user_name", @"password"]; NSURL *url = [NSURL URLWithString:urlStr]; NSMutableURLRequest *postRequest = [[NSMutableURLRequest alloc]initWithURL:url]; [postRequest setHTTPMethod:@"POST"]; [postRequest setHTTPBody:[dataStr dataUsingEncoding:NSUTF8StringEncoding]]; NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; sessionConfig.timeoutIntervalForRequest = 15; NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:[NSOperationQueue mainQueue]]; NSURLSessionDataTask *task = [session dataTaskWithRequest:postRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (error == nil) { NSLog(@"response:%@",response); } else { NSLog(@"error:%@",error); } }]; [task resume]; } @end ``` 这里我们使用NSURLSession发起POST请求,将请求数据放在请求体中,并通过NSURLSessionDataTask对象获取请求的结果。 3.使用AFNetworking发起GET请求 以下是一个发起GET请求的示例,我们使用AFNetworking从服务器请求城市列表,并将结果放在一个tableView中显示。 ```objc @interface ViewController () @property (nonatomic,strong) NSMutableArray *tableData; @property (nonatomic,strong) UITableView *tableView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [self createUI]; [self requestData]; } #pragma mark - UI - (void)createUI{ self.tableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain]; self.tableView.delegate = self; self.tableView.dataSource = self; [self.view addSubview:self.tableView]; } #pragma mark - NetWork - (void)requestData{ AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager GET:@"https://raw.githubusercontent.com/yakun2016/file/master/city.json" parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { if ([responseObject isKindOfClass:[NSArray class]]) { NSArray *array = (NSArray *)responseObject; [self.tableData addObjectsFromArray:array]; dispatch_async(dispatch_get_main_queue(), ^{ [self.tableView reloadData]; }); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"error:%@",error); }]; } #pragma mark - getter - (NSMutableArray *)tableData { if (!_tableData) { _tableData = [NSMutableArray new]; } return _tableData; } #pragma mark - UITableViewDataSource - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.tableData.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *identifier = @"cell"; UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:identifier]; if (!cell) { cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; } NSDictionary *dict = [self.tableData objectAtIndex:indexPath.row]; cell.textLabel.text = [dict objectForKey:@"name"]; return cell; } @end ``` 这里我们使用了AFNetworking发起GET请求,并将请求到的数据通过tableView显示出来。 四.总结 通过此次的介绍,我们了解了AFNetworking的作用、使用方法,以及在实际开发中的应用。AFNetworking是一个易于使用的网络通信框架,提供了强大的功能和简便的API,以便于更快速、更简便地完成网络通信。 如果你喜欢我们三七知识分享网站的文章,
欢迎您分享或收藏知识分享网站文章
欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
我从没见过长的这么有考古价值的。