Runloop
Runloop是事件接收和分发机制的一个实现。是线程相关的基础框架的一部分。一个Runloop就是一个事件处理的循环,用来不停的调度工作及处理输入事件。使用runloop的目的就是让你的线程
RunLoop的主要目的:
保证程序执行的线程不会被系统终止,如果没有RunLoop,UIApplicationMain
函数执行完毕之后将直接返回,就是说程序一启动然后就结束,在有工作的时候忙于工作,而没有工作的时候处于休眠状态.
什么时候使用Runloop ?
当需要和该线程进行交互的时候才会使用Runloop.
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:711315161,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
Runloop Mode

一个Runloop
可能有几个mode
Runloop Mode
实际上是 Source
,Timer
和 Observer
的集合,不同的 Mode 把不同组的Source
,Timer和Observer
隔绝开来。Runloop
在某个时刻只能跑在一个 Mode 下,处理这一个 Mode 当中的 Source
,Timer 和 Observer
。
苹果文档中提到的 Mode 有五个,分别是:
NSDefaultRunLoopMode
:默认的mode,正常情况下都是在这个mode
NSConnectionReplyMode
NSModalPanelRunLoopMode
NSEventTrackingRunLoopMode
:使用这个Mode去跟踪来自用户交互的事件(比如UITableView上下滑动)
NSRunLoopCommonModes
iOS 中公开暴露出来的只有 NSDefaultRunLoopMode
和 NSRunLoopCommonModes
。 NSRunLoopCommonModes
实际上是一个 Mode 的集合,默认包括 NSDefaultRunLoopMode
和 NSEventTrackingRunLoopMode
。
Source
即可以唤醒Runloop的一些事件。比如用户点击了屏幕,就会创建一个input source。
- source0 : 非系统事件
- source1 : 系统时间
Timer
我们经常用的NSTimer就属于这一类。
Observer
某个observer可以监听runloop的状态变化,并作出一定反应。
RunLoop运行流程

没有事情的时候,Runloop处于休眠状态。当外部source将其唤醒后,它会依次处理接收到的timer/source,然后再次进入休眠。
网友评论