欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

分析IOS RunLoop的事件循环机制

程序员文章站 2022-04-10 23:18:23
在runloop启动之后会发送一个通知,来告知观察者将要处理timer/source0事件这样一个通知的发送处理source0事件如果有source1要处理,这时会通过一个go to语句的实现来进行代...

在runloop启动之后会发送一个通知,来告知观察者

将要处理timer/source0事件这样一个通知的发送

处理source0事件

如果有source1要处理,这时会通过一个go to语句的实现来进行代码逻辑的跳转,处理唤醒是收到的消息

如果没有source1要处理,线程就将要休眠,同时发送一个通知,告诉观察者

然后线程进入一个用户态到内核态的切换,休眠,然后等待唤醒,唤醒的条件大约包括三种:

1、source1

2、timer事件

3、外部手动唤醒

线程刚被唤醒之后也要发送一个通知告诉观察者,然后处理唤醒时收到的消息

回到将要处理timer/source0事件这样一个通知的发送

然后再次进行上面步骤,这就是一个runloop的事件循环机制

内部代码逻辑整理如下:

可以看到,实际上 runloop 就是这样一个函数,其内部是一个do-while循环。当你调用cfrunlooprun()时,线程就会一直停留在这个循环里;直到超时或被手动停止,该函数才会返回

有一个这样的问题:当我们点击一个app,从我们点击到程序启动、程序运行再到程序杀死这个过程,系统都发生了什么呢?

实际上当我们调用了main函数之后,会调用uiapplicationmain函数,在这个函数内部会启动主线程的runloop,然后经过一系列的处理,最终主线程的runloop会处于一个休眠状态,然后我们此时如果点击一下屏幕,会转化成一个source1来让我们的主线程唤醒,然后当我们杀死程序时,会调用runloop的退出,同时发送通知告诉观察者

找到一张总结图帮助记忆:

分析IOS RunLoop的事件循环机制

以上就是分析ios runloop的事件循环机制的详细内容,更多关于ios runloop的事件循环机制的资料请关注其它相关文章!

相关标签: IOS RunLoop