Runloop相关问题
<a href="http://blog.csdn.net/windwhc/article/details/48492009">引用来自</a>
1.Runloop和线程有什么关系?
每个线程都会有一个自己的runloop,线程一般不是单一运行,往往会来来回回处理其他任务。例如我们经常使用http异步请求,系统会创建一个线程并且把网络请求事件加入到runloop中,当有数据接收到的时候runloop会监听到,从而把这些数据进行处理。
runloop就是线程的一个事件循环调度块,当该事件发生时runloop会捕捉到并通知该线程
2.Runloop的model作用是什么?
runloop的model是在线程中的运作模式,有如下几个运作模式:
NSDefaultRunLoopMode:
默认模式中几乎包含了所有输入源(NSConnection除外),一般情况下应使用此模式。
NSConnectReplyModel:
处理NSConnection对象相关事件,系统内部使用,普通开发者基本不会使用
*NSModalPanelRunLoopMode *:
处理modal panels事件。
UITrackingRunLoopMode:
在拖动loop或其他user interface tracking loops时处于此种模式下,在此模式下会限制输入事件的处理。例如,当手指按住UITableView拖动时就会处于此模式。
NSRunLoopCommonModes
这是一个伪模式,其为一组run loop mode的集合,将输入源加入此模式意味着在Common Modes中包含的所有模式下都可以处理。默认情况下Common Modes包含default modes,modal modes,event Tracking modes.可使用CFRunLoopAddCommonMode方法想Common Modes中添加自定义modes。
- 苹果公开提供的 Mode 有两个:
NSDefaultRunLoopMode(kCFRunLoopDefaultMode)
NSRunLoopCommonModes(kCFRunLoopCommonModes)
3.猜想Runloop内部是如何实现的?
<pre><code>
do{
if(有事件处理){
获取当前事件模式,结束其他事件模式
处理该事件
}
}while(线程是否结束)
</pre></code>