美文网首页
Runloop相关问题

Runloop相关问题

作者: 王轩008_46301 | 来源:发表于2017-06-01 16:36 被阅读25次

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

    相关文章

      网友评论

          本文标题:Runloop相关问题

          本文链接:https://www.haomeiwen.com/subject/tjbsfxtx.html