工程代码如下



下载源码如下


网络通信:URLSession
网络状态监听:Reachability
网络通信安全:Security
网络通信序列化:Serialization
UIKit扩展部分:UIKit(以Category形式添加特性)
彼此关系是:

AFNetworking的核心模块是通信URLSession那一块。在通信模块中有两个类,AFHTTPSessionManager和AFURLSessionManager。其中前者继承于后者,是对HTTP请求的封装。
使用NSURLSession请求
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:@"https://github.com"]];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSString *dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", dataStr);
}];
[task resume];
使用 NSURLSession 来进行 HTTP 请求并且获得数据,总共有五个步骤。
1.实例化一个 NSURLRequest/NSMutableURLRequest。设置URL。
2.通过sharedSession方法获取NSURLSession
3.在session上调用dataTaskWithRequest:completionHandler方法返回一个 NSURLSessionDataTask
4.向data task发送消息resume开始执行这个任务
5.在completionHandler 中将数据编码 返回字符串
使用AF请求
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[[NSURL alloc] initWithString:@"xxx"]];
[manager GET:@"xxx" parameters:nil progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// Success
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// error
}];
这里2个步骤
1.创建一个AFHTTPSessionManager对象
2.使用这个对象调用含有block的请求方法
AFHTTPSessionManager 类图如下

初始化的调用栈
- [AFHTTPSessionManager initWithBaseURL:]
- [AFHTTPSessionManager initWithBaseURL:sessionConfiguration:]
- [AFURLSessionManager initWithSessionConfiguration:]
- [NSURLSession sessionWithConfiguration:delegate:delegateQueue:]
- [AFJSONResponseSerializer serializer] // 负责序列化响应
- [AFSecurityPolicy defaultPolicy] // 负责身份认证
- [AFNetworkReachabilityManager sharedManager] // 查看网络连接情况
- [AFHTTPRequestSerializer serializer] // 负责序列化请求
- [AFJSONResponseSerializer serializer] // 负责序列化响应
1.AFURLSessionManager 是 AFHTTPSessionManager 的父类
2.AFURLSessionManager 负责生成 NSURLSession 的实例
3.管理AFSecurityPolicy 和 AFNetworkReachabilityManager的实例。一个保证请求的安全。一个查看网络连接情况。
4.AFJSONResponseSerializer的实例是用来序列化HTTP响应
5.AFHTTPSessionManager 有着自己的 AFHTTPRequestSerializer和AFJSONResponseSerializer 来管理请求和响应的序列化,同时依赖父类提供的接口保证安全、监控网络状态,实现发出 HTTP 请求这一核心功能。
GET方法调用栈
- [AFHTTPSessionManager GET:parameters:process:success:failure:]
- [AFHTTPSessionManager dataTaskWithHTTPMethod:parameters:uploadProgress:downloadProgress:success:failure:] // 返回 NSURLSessionDataTask #1
- [AFHTTPRequestSerializer requestWithMethod:URLString:parameters:error:] // 返回 NSMutableURLRequest
- [AFURLSessionManager dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler:] // 返回 NSURLSessionDataTask #2
- [NSURLSession dataTaskWithRequest:] // 返回 NSURLSessionDataTask #3
- [AFURLSessionManager addDelegateForDataTask:uploadProgress:downloadProgress:completionHandler:]
- [AFURLSessionManagerTaskDelegate init]
- [AFURLSessionManager setDelegate:forTask:]
- [NSURLSessionDataTask resume]
1.这里主要就是调用dataTaskWithRequest返回task 然后task调用resume
网友评论