IOS 中什么是 AFNetworking?如何使用?代码举例讲解

AFNetworking 是 IOS 平台上最著名的第三方网络库。它基于 NSURLSession 构建,提供了更高层的网络请求封装,解决了 NSURLSession 有些繁琐的 API 问题,使网络编程更加简单易用。

AFNetworking 的主要特点:

  1. 简单友好的 API,隐藏 NSURLSession 的复杂性。
  2. 上传、下载的进度监控跟踪。
  3. 对 JSON 的解析支持。
  4. 支持通知机制。
  5. 简单易用的 SSL pinning 和天然的 IPv6 支持。

使用 AFNetworking 进行 GET 请求的示例代码:

objc
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

[manager GET:@"http://httpbin.org/get" 
    parameters:nil 
    progress:nil 
    success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"%@", responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"Error: %@", error);
}];

使用 AFNetworking 上传图片的示例代码:

objc
NSURL *url = [NSURL URLWithString:@"http://httpbin.org/post"];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:url];

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"png"];
NSURL *fileURL = [NSURL fileURLWithPath:filePath];

NSDictionary *parameters = @{@"name": @"AFNetworking"}; 
[manager POST:url.path parameters:parameters headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
    [formData appendPartWithFileURL:fileURL name:@"file" fileName:@"test.png" mimeType:@"image/png" error:nil];
} progress:^(NSProgress * _Nonnull uploadProgress) {
    // 上传进度
} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    NSLog(@"Success: %@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"Error: %@", error);
}];