AFN调用流程分析:
重点是task和delegate之间的绑定和解除逻辑
1. AFHTTPSessionManager: 发起网络请求(例如GET);
2. AFHTTPSessionManager内部调用dataTaskWithHTTPMethod:方法(内部处理requestSerializer);
3. dataTaskWithHTTPMethod内部调用父类AFURLSessionManager的dataTaskWithRequest: uploadProgress: downloadProgress: completionHandler方法;
4. AFURLSessionManager中的dataTaskWithRequest方法内部设置全局session和创建task;
5. AFURLSessionManager中的dataTaskWithRequest方法内部给task设置delegate(AFURLSessionManagerTaskDelegate);
6. taskDelegate代理的初始化: 绑定task / 存储task下载的数据 / 下载或上传进度 / 进度与task同步(KVO)
7. task对应的AFURLSessionManagerTaskDelegate实现对进度处理、Block调用、Task完成返回数据的拼装的功能等;
8. setDelegate: forTask: 加锁设置通过一个字典处理Task与之代理方法关联; 添加对Task开始、重启、挂起状态的通知的接收.
9. [downloadTask resume]后执行开始, 走代理回调方法(内部其实是NSURLSession的各种代理的实现);
10. task完成后走URLSession: task: didCompleteWithError: 回调对返回的数据进行封装;
11. 同时移除对应的task; removeDelegateForTask: 加锁移除8中的字典和通知;
网友评论