NSURLSession与线程问题
来源:互联网 发布:查杀木马软件 编辑:程序博客网 时间:2024/04/30 14:34
一.NSURLSession有两种使用方式:
1.
NSURLSession* session = [NSURLSession sharedSession]
此方式,没有设置NSURLSession的delegate,因此不会走代理接口,所以若要实现有意义的功能,在创建各种Task的时候,需要使用带completionHandler的接口,如:
NSURLSessionDownloadTask* downloadTask = [session downloadTaskWithURL:url completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {}];
2.
NSURLSession* session = [NSURLSessionsessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]delegate:selfdelegateQueue:nil];
此方式下,已经设置NSURLSession的delegate,因此期望会对返回的响应及数据走代理方式进行处理,但是,需要注意的是,如果在创建Task的时候,使用了带有completionHandler参数的方式,则响应仍然会在com,pletionHandler的block中进行处理,并且不会走代理接口。因此,若保证响应走代理接口,则要使用不带completionHandler参数的接口,或者将completionHandler的block置为nil。
二.响应的执行线程问题:
1.对于创建的task,如果其响应处理的方式为通过上述completionHandler中block的方式处理:
1)若session的创建方式为NSURLSession* session = [NSURLSession sharedSession],则不管session执行的线程为主线程还是子线程,block中的代码执行线程均为任意选择的子线程。
2)若session的创建方式为
NSURLSession* session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil],
若delegateQueue = nil,则不管session执行的线程为主线程还是子线程,block中的代码执行线程均为任意选择的子线程;
若delegateQueue = [NSOperationQueue mainQueue],则不管session执行的线程为主线程还是子线程,则block中的代码执行线程为主线程中执行;
若delegateQueue = [[NSOperationQueue alloc]init],则不管session执行的线程为主线程还是子线程,block中的代码执行线程均为任意选择的子线程;
2.对于创建的task,如果其响应处理的方式为通过上述delegate代理借口的方式处理:
若delegateQueue = nil,则不管session执行的线程为主线程还是子线程,block中的代码执行线程均为任意选择的子线程;
若delegateQueue = [NSOperationQueue mainQueue],则不管session执行的线程为主线程还是子线程,则block中的代码执行线程为主线程中执行;
若delegateQueue = [[NSOperationQueue alloc] init],则不管session执行的线程为主线程还是子线程,block中的代码执行线程均为任意选择的子线程;
三.对于NSURLSession,当其在子线程中开启任务,并通过代理方式进行响应的处理时,此处不需要手动开启此线程的runloop,这一点不同于NSURLConnection。
- NSURLSession与线程问题
- NSURLSession下载问题
- NSURLConnection 与 NSURLSession
- NSURLSession下载与缓存
- NSURLSession简介与入门
- NSURLSession与NSURLConnection区别
- NSURLSession简介与入门
- NSURLSession下载与缓存
- NSURLSession下载与缓存
- NSURLSession与NSURLConnection区别
- NSURLSession与NSURLConnection区别
- NSURLSession简介与入门
- NSURLSession与NSURLConnection
- NSURLSession与NSURLConnection区别
- NSURLSession的强引用问题
- 关于NSURLSession代理函数问题
- NSURLConnection与NSURLSession大比拼
- NSURLSession与NSURLConnection区…
- ADO类的使用,在线=========================
- <c:forEach>标签的使用(用List集合)
- CentOS 7.X Docker安装
- 单机版solr安装及遇到的问题
- 总结SSH阶段常见异常系列之五spring
- NSURLSession与线程问题
- manifset 起什么用呀?太坑人了
- 基于sparkMLlib的机器学习_[1]_基本数据类型[2]向量标签LabeledPoint
- hdu 2639 Bone Collector II DP(第i最优决策)
- 2016年编程小结
- OpenGL 法线贴图 基础
- ssh导入导出数据 表格
- jdk8u121下载长城网太坑官网下不到
- 第11章持有对象 _11.1泛型和类型安全的容器