一般一个线程一次只能执行一个任务,任务干完就退出,没他的事了。但有时已经创建好了线程,任务却还不确定,还可能不止一个,说不定还有意外的任务加入。这个时候就需要一种机制让线程能竖起耳朵等待任务,不能退出,但没有任务时可以偷懒(竖着耳朵偷懒)。描述这种机制的模型叫Event loop。Apple对Event loop的实现就是Run Loop。简单说,Run Loop是一个事件处理循环,用于接收和处理事件(Events)。搞出他的主要目的是为了线程在有活干时拼命,没活干时睡觉。
Run Loop
Run Loop中的事件有两种来源:
- Iput sources:传输的是来自其它线程或者程序的异步事件。
- Timer sources:传输的是同步事件,会在指定的时间执行、或者在某个时间间隔间重复执行。
Run Loop Modes:
一个run loop mode就是input sources、timers和该run loop所有的监听者(observer)的集合。每次执行执行run loop都需要指定一个mode。不同mode通过名称区分。
注意:
- Apple不允许直接创建Run Loop。程序中每个线程都有与他关联的Run Loop。
- 每次执行Run Loop都需要指定一个mode。