美文网首页
RunLoop 运行循环

RunLoop 运行循环

作者: zcz19911 | 来源:发表于2018-07-17 13:15 被阅读0次

RunLoop 的三个作用:

1、保证程序不退出(比如:程序启动之后执行的 main 函数里是主线程的 RunLoop,自动开启)。

2、负责监听事件(触摸事件、时钟事件、网络事件)。

3、渲染界面。

特点:有事情就去处理,处理完就休眠。

RunLoop图片来源网络

一个 RunLoop 包含若干个 Mode,每个 Mode 又包含若干个 Source/Timer/Observer。每次调用 RunLoop 的主函数时,只能指定其中一个 Mode,这个Mode被称作 CurrentMode。

Mode:模式。RunLoop 的工作模式有5种(最后两种程序员触碰不到):

        1、默认模式:放时钟、网络事件

        2、UI模式:优先级最高(触摸事件)

        3、通用模式:占位模式(默认模式和UI模式下的事件都会响应)

        4、启动模式:程序在启动时存在的一种模式,启动之后就没有了

        5、系统内核模式:处理系统内核事件

Source:事件源。事件源有两个分类:一个是Source0(非系统内核事件。只包含了一个回调(函数指针),它并不能主动触发事件);一个是Source1(系统内核事件。包含了一个 mach_port 和一个回调(函数指针), 能主动唤醒 RunLoop 的线程,如:线程通讯。)

Observer:观察者。监听RunLoop的状态,可监听的状态有:

        kCFRunLoopEntry         = (1UL << 0), // 即将进入Loop

        kCFRunLoopBeforeTimers  = (1UL << 1), // 即将处理 Timer

        kCFRunLoopBeforeSources = (1UL << 2), // 即将处理 Source

        kCFRunLoopBeforeWaiting = (1UL << 5), // 即将进入休眠

        kCFRunLoopAfterWaiting  = (1UL << 6), // 刚从休眠中唤醒

        kCFRunLoopExit          = (1UL << 7), // 即将退出Loop

Timer:定时器。

线程和 RunLoop 之间是一一对应的。主线程的RunLoop默认是自动开启的,子线程的RunLoop默认不开启。线程刚创建时并没有 RunLoop,如果你不主动获取,那它一直都不会有。RunLoop 的创建是发生在第一次获取时,RunLoop 的销毁是发生在线程结束时。

主线程和子线程有什么区别?

对于操作系统来讲,没有本质的区别。但iOS系统对待主线程和子线程有区别:为了提高性能,只在主线程上渲染UI,这样就不需要加锁。(子线程上也可以操作UI,但可能会产生意想不到的bug)

参考:深入理解RunLoop https://blog.ibireme.com/2015/05/18/runloop/

相关文章

  • RunLoop详解

    RunLoop详解 RunLoop运行循环(死循环) RunLoop模式 NSDefaultRunLoopMode...

  • RunLoop概念与响应者链

    一.RunLoop简介 什么是RunLoop? RunLoop就是运行循环,在程序运行的过程中循环做一些事情,如果...

  • 教你如何轻松搞定 Runloop

    认识 Runloop Runloop 就是运行循环,如果没有 Runloop,程序一运行就会退出,有 Runloo...

  • iOS-Runloop1-Runloop

    一. RunLoop相关 什么是Runloop?顾名思义,Runloop就是运行循环,就是在程序运行过程中循环做一...

  • 【iOS】Runloop

    Runloop概念 运行循环(死循环) Runloop作用 保持程序的持续运行 处理app中的各种事件 节省CPU...

  • RunLoop

    RunLoop简介 RunLoop,就是一个运行循环,通过一个内部的运行循环(Event Loop)对事件或者消息...

  • NSRunLoop

    RunLoop运行逻辑 RunLoop面试题: 1、什么是RunLoop? 答:从字面意思上:运行循环、跑圈。 其...

  • 初探Runloop

    1.runloop是什么? runloop 是一个运行循环(死循环); return UIApplicationM...

  • 简单谈谈RunLoop

    1、RunLoop定义 从字面上看,run是运行,执行的意思,loop是循环的意思,其实RunLoop就是运行循环...

  • RunLoop基础

    RunLoop简介 RunLoop运行循环,在程序运行过程中循环做一些事情.如:定时器(Timer)、Perfor...

网友评论

      本文标题:RunLoop 运行循环

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