iOS RunLoop(3)RunLoop原理

iOS RunLoop(1)RunLoop简介
iOS RunLoop(2)RunLoop相关类
iOS RunLoop(3)RunLoop原理
iOS RunLoop(4)RunLoop实战应用

根据苹果在文档里的说明,RunLoop 内部的逻辑大致如下:

iOS RunLoop(3)RunLoop原理_第1张图片
runtime运行逻辑图.png

这张图对于我们理解RunLoop来说太有帮助了,下边我们可以来说下官方文档给我们的RunLoop逻辑。

在每次运行开启RunLoop的时候,所在线程的RunLoop会自动处理之前未处理的事件,并且通知相关的观察者。

具体的顺序如下:

1 通知观察者RunLoop已经启动
2 通知观察者即将要开始的定时器
3 通知观察者任何即将启动的非基于端口的源
4 启动任何准备好的非基于端口的源
5 如果基于端口的源准备好并处于等待状态,立即启动;并进入步骤9
6 通知观察者线程进入休眠状态
7 将线程置于休眠知道任一下面的事件发生:

7.1 某一事件到达基于端口的源
7.2 定时器启动
7.3 RunLoop设置的时间已经超时
7.4 RunLoop被显示唤醒

8 通知观察者线程将被唤醒
9 处理未处理的事件

9.1 如果用户定义的定时器启动,处理定时器事件并重启 RunLoop。进入步骤2
9.2 如果输入源启动,传递相应的消息
9.3 如果RunLoop被显示唤醒而且时间还没超时,重启RunLoop。进入步骤2

10 通知观察者RunLoop结束

文章来源:
https://www.jianshu.com/p/d260d18dd551
https://blog.ibireme.com/2015/05/18/runloop/

你可能感兴趣的:(iOS RunLoop(3)RunLoop原理)