Run Loops初探

一般一个线程一次只能执行一个任务,任务干完就退出,没他的事了。但有时已经创建好了线程,任务却还不确定,还可能不止一个,说不定还有意外的任务加入。这个时候就需要一种机制让线程能竖起耳朵等待任务,不能退出,但没有任务时可以偷懒(竖着耳朵偷懒)。描述这种机制的模型叫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通过名称区分。

注意:

  1. Apple不允许直接创建Run Loop。程序中每个线程都有与他关联的Run Loop。
  2. 每次执行Run Loop都需要指定一个mode。

你可能感兴趣的:(Run Loops初探)