Runloop
2018-04-11 本文已影响8人
里克尔梅西
知道的点:
1、RunLoop 实际上就是一个对象,这个对象管理了其需要处理的事件和消息,并提供了一个入口函数来执行上面 Event Loop 的逻辑。线程执行了这个函数后,就会一直处于这个函数内部 “接受消息->等待->处理” 的循环中(do...while),直到这个循环结束(比如传入 quit 的消息),函数返回。
2、作用:
- 保持程序的持续运行
- 处理App中的各种事件(触摸、定时器、Selector事件)
- 节省CPU资源,提高程序性能(该做事做事,没事做休息)
3、原理
- 一个RunLoop包含若干个Mode,每个Mode又包含若干个Source、Observer、Timer
- 每次RunLoop启动,只能指定一个Mode,这个Mode被称为CurrentMode
- 如果需要切换Mode,只能退出Loop,再重新指定一个Mode进入, 以使不同组之间的Source、Observer、Timer互不受影响
4、RunLoop和线程有什么关系
- RunLoop与线程是一一对应的
- 程序启动时,主线程默认会自己创建RunLoop,并设置为Default模式
- 创建子线程时,必须获取当前线程的RunLoop并启动它
参考文章:
https://blog.ibireme.com/2015/05/18/runloop/
https://blog.csdn.net/qq_30513483/article/details/53373905