Runloop相关问题

2017-06-01  本文已影响25人  王轩008_46301

<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。

3.猜想Runloop内部是如何实现的?

<pre><code>
do{
if(有事件处理){
获取当前事件模式,结束其他事件模式
处理该事件
}
}while(线程是否结束)
</pre></code>

上一篇下一篇

猜你喜欢

热点阅读