美文网首页
《RunLoop内部实现原理》

《RunLoop内部实现原理》

作者: 不够果断是种癌 | 来源:发表于2019-06-28 16:44 被阅读0次

说明:本文为极客时间戴铭的《iOS开发高手课》专栏的学习笔记,仅供自我学习,禁止转载。

接下来我们看runLoop的原理。

01.通知observers:RunLoop 要开始进入 loop 了。

02.开启一个 do while 来保活线程。通知 Observers:RunLoop 会触发 Timer 回调、Source0 回调,接着执行加入的 block。

接下来,触发 Source0 回调,如果有 Source1是 ready 状态的话,就会跳转到 handle_msg去处理消息。

03.回调触发后,通知 Observers:RunLoop 的线程将进入休眠(sleep)状态。

04.进入休眠后,会等待 mach_port 的消息,以再次唤醒。只有在下面四个事件出现时才会被再次唤醒:

1.基于 port 的 Source 事件;

2.Timer 时间到;

3.RunLoop 超时;

4.被调用者唤醒。

等待唤醒的代码如下:

05.唤醒时通知 Observer:RunLoop 的线程刚刚被唤醒了。

06.RunLoop 被唤醒后就要开始处理消息了:

如果是Timer时间到的话,就会出发Timer的回调;

如果是dispatch的话,就执行block;

如果是sorce1事件的话,就处理这个事件;

消息执行完后,就执行加到loop里面的block。代码如下;

07.根据当前 RunLoop 的状态来判断是否需要走下一个 loop。当被外部强制停止或loop超时,就不继续下一个loop了,否则继续下一个loop。

整个过程用戴铭老师的一张图来表示:

接下来我们看看loop代码定义的状态。

相关文章

  • 探寻RunLoop的本质

    iOS底层原理总结 - RunLoop 面试题 讲讲 RunLoop,项目中有用到吗? RunLoop内部实现逻辑...

  • 《RunLoop内部实现原理》

    说明:本文为极客时间戴铭的《iOS开发高手课》专栏的学习笔记,仅供自我学习,禁止转载。 接下来我们看runLoop...

  • RunLoop

    RunLoop思考 讲讲RunLoop,项目中实际应用? RunLoop内部实现逻辑以及数据结构? RunLoop...

  • 19.猜想runloop内部是如何实现的?

    猜想runloop内部是如何实现的? runloop 本质上就是 event loop 的实现。 简单来说。。。 ...

  • Runloop

    Runloop 实现原理及应用iOS - RunLoop 底层源码详解及具体运用

  • RunLoop简介

    RunLoop简介 RunLoop底层实现原理 RunLoop接收输入事件的2种来源 RunLoop对象 开源的C...

  • RunLoop

    讲讲 RunLoop,项目中有用到吗? RunLoop内部实现逻辑? RunLoop和线程的关系? timer 与...

  • RunLoop 详解

    一、RunLoop简介 1、基本概念和原理   RunLoop 是通过内部维护的事件循环(Event Loop)来...

  • RunLoop

    RunLoop 原理 RunLoop 这个对象,在 iOS 里由 CFRunLoop 实现。简单来说,RunLoo...

  • iOS RunLoop

    关于 runloop 面试中经常被问到: 讲讲 RunLoop,项目中有用到吗? RunLoop内部实现逻辑? R...

网友评论

      本文标题:《RunLoop内部实现原理》

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