ios-NSURLConnection多线程下的问题
来源:互联网 发布:linux signal 11 编辑:程序博客网 时间:2024/06/06 03:46
首先先介绍下它的几个方法和一些基本的概念,当我们去使用了下面的代码去创建连接发送请求的时候,其实下载操作是在主线程中执行的
NSURLConnection * conn = [NSURLConnection connectionWithRequest:request delegate:self]; //4.启动连接 [conn start];
根据这个方法的介绍,我们可以知道,有这么一段话
The delegate object for the connection. The connection calls methods on this delegate as the load progresses. Delegate methods are called on the same thread that called this method. For the connection to work correctly, the calling thread’s run loop must be operating in the default run loop mode.
其实就是说明了在调用该方法的线程下去调用代理方法,也就是说如果我们下面的代码是在主线程去调用的话,那么代码方法也会在主线程去执行。还有就是为了保证连接的正确,调用线程的Runloop必须运行在默认的运行循环的模式下
+ (NSURLConnection *)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate;对于上述的问题,如果我们想要把代理方法去放到子线程去执行的话,那么我们就去设置代理方法执行的队列
//设置代理方法执行的操作队列 [conn setDelegateQueue:[[NSOperationQueue alloc]init]];以及其实下载操作是在主线程上执行的,因为在我们进行下载的时候,我们去拖动textView的时候,下载是没有在进行的,因为拖动textView的时候模式已经是UITrackingRunLoopMode模式了,而我们下载是其实在start方法中也是有所提示的。
那么问题来了,如果我们直接想把这个操作放在子线程下是不行的,因为没有开启运行循环,我们必须要去开启运行循环才能去监听这个网络事件,才能运行,其实上面start方法也有解释的。没有运行循环肯定无法执行,所以我们要去开启运行循环,我们可以采取Core Foundation中的CFRunLoop来做。
阅读全文
0 0
- ios-NSURLConnection多线程下的问题
- ios中NSURLConnection的使用
- iOS 02-NSURLConnection的使用
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(四、五、六)--NSTimer--NSURLConnection子线程中运行 ---- NSOperation
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线
- 利用运行循环解决NSURLConnection多线程下载的问题(只需要了解)
- iOS NSURLConnection
- iOS 多线程初步研究-NSURLConnection在子线程中运行
- 利用transition属性实现一个简单小巧的hover效果
- jmeter 换行获取
- 归并排序
- Resolve Error “ArtifactTransferException: Could not transfer artifact” or “Failure to Transfer” in M
- linux_chmod文件权限修改
- ios-NSURLConnection多线程下的问题
- Canvas实现画图工具
- SpringBoot REST 火推04
- ab 压力测试
- UsacoTraining Chapter1.2 Broken Necklace
- Android新手如何学习开发一款app?
- 2018 最具就业前景的 7 大编程语言,Java、Python 和 JavaScript 前三无悬念?
- 【笔记】深入理解 java 虚拟机---GC垃圾回收算法
- Window安装Redis并设置为开机启动