036*:AFNetwork源码分析
1:文件
2:函数调用栈
3:简单介绍
4:AFHTTPSessionManager 介绍
1: AFHTTPSessionManager是继承AFURLSessionManager
2:AFHTTPSessionManager: 发起网络请求(例如GET);
3:AFHTTPSessionManager内部调用dataTaskWithHTTPMethod:方法(内部处理requestSerializer); dataTaskWithHTTPMethod内部调用父类AFURLSessionManager的dataTaskWithRequest: uploadProgress: downloadProgress: completionHandler方法;
4:
AFURLSessionManager中的dataTaskWithRequest方法内部设置全局session和创建task;
5:AFURLSessionManager中的dataTaskWithRequest方法内部给task设置delegate(AFURLSessionManagerTaskDelegate);
6:AFURLSessionManagerTaskDelegate作用有三:
6.1:KVO监听task对应的进度处理、Block调用、Task完成返回数据的拼装的功能等;
6.2:setDelegate: forTask:
加锁设置通过一个字典处理Taskid与之代理方法关联
NSURLSessionDelegate、NSURLSessionTaskDelegate、NSURLSessionDataDelegate、NSURLSessionDownloadDelegate
6.3:添加对Task开始、重启、挂起状态的通知的接收.
7:[downloadTask resume]后执行开始, 走代理回调方法(内部其实是NSURLSession的各种代理的实现);
8:task完成后走URLSession: task: didCompleteWithError: 回调对返回的数据进行封装;
同时移除对应的task; removeDelegateForTask: 加锁移除8种通知和字典对应的任务id;
9:AFNetworking 在+ (void)load
这个方法里面,利用Runtime交换了resume
and suspend
的方法实现。并且发出通知。
可以看出默认创建一个NSOperationQueue且并发数为一个,串行执行任务。
2:AFHTTPSessionManager,对请求方法的处理,
包含GET
HEAD
POST
OPTIONS
PUT
DELETE
TRACE
CONNECT
这8个方法
3:AFSecurityPolicy
关于ssl\tls 网络安全方面
4:AFNetworkReachabilityManager
用来监控网络环境变化的类。
5:AFURLRequestSerialization 请求序列化
AFURLResponseSerialization 响应序列化
3:iOS源码补完计划--AFNetworking 3.1.0源码研读
5:iOS_AFNetworking 结构解析+用例分析+源码阅读
7:AFNetworking 3.0 源码解读(六)之 AFHTTPSessionManager