美文网首页
谈一谈对RunLoop的理解

谈一谈对RunLoop的理解

作者: 鸡蛋不吃黄 | 来源:发表于2017-03-25 08:35 被阅读0次

    Runloop理解:

    每个线程都有一个消息循环—>消息循环监听着输入事件—>事件有两种类型—>输入源和定时源—>将创建好的输入源以确定的模式加入消息循环中 —> 由于子线程消息循环默认不开启, 所以线程中无法监听到是否有方法需要其执行,就会销毁,导致方法执行不到 —> 需要开启子线程的消息循环 —> 三种开启方法, run开启了无法关闭, runUntilDate虽然开启了确定的时间也不靠谱 , 苹果提供了判断模式,点击run 右边帮助栏查找. RunLoop是时间循环,负责监听事件,保证应用程序持续运行。监听到事件后,向注册的对象发送消息,从而实现事件响应

    Runloop(消息循环)的目的

    保证程序不退出负责处理输入事件

    事件类型如下:
    如果没有事件发生, 会让程序进入休眠状态,通俗的讲,runloop主要就是为保证程序在执行过程中不会被系统终止,确保不断的监听用户交互行为

    runloop的运行循环模式:

    有5种模式
    第一种就是默认模式: 也就是一般的方法调用使用的模式。
    第二种就是跟踪模式: 用于scrollview追踪触摸滑动, 使其不受其他模式的影响, 可以共存。
    第三种就是当程序启动时第一次开启的运行循环模式。
    第四种的话 一般开发中没听到过。没有去研究过。
    第五种是一种占位模式。不过没什么太大用处。
    系统默认注册了5个Mode:

    NSDefaultRunLoopMode:App 的默认 Mode,通常主线程是在这个 Mode 下运行(默认情况下运行)
    UITrackingRunLoopMode:界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响(操作 UI 界面的情况下运行)
    UIInitializationRunLoopMode:在刚启动 App 时进入的第一个 Mode,启动完成后就不再使用
    GSEventReceiveRunLoopMode:接受系统事件的内部 Mode,通常用不到(绘图服务)
    NSRunLoopCommonModes:这是一个占位用的 Mode,不是一种真正的 Mode (RunLoop无法启动该模式,设置这种模式下,默认和操作 UI 界面时线程都可以运行,但无法改变 RunLoop 同时只能在一种模式下运行的本质)

    Runloop本质:

    其实是一个结构体。里面有observer。nstimer。source(监听事件的)等等

    相关文章

      网友评论

          本文标题:谈一谈对RunLoop的理解

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