Run Loop 简单来说就是一个循环,一个不断循环的循环。而线程,就是需要依赖这种循环来处理各种事件,执行各种应对事件的处理方法
一个 Run Loop 大致上会从两个源头获取到事件
Input sources 传递的是异步事件,如其他线程发送过来的事件,或其他程序发送过来的事件
Timer sources 传递的是同步事件,这类事件一般是在特定的事件发生,或在特定的时间间隔重复发生
上图是 Run Loop 运行的大致过程,可以看到,有两种 sources 会触发箭头指向 Thread, 说明这两种 sources 的事件会涉及到部分线程的运行状态
对于 Input sources, 即异步事件的到达,会将事件传递到对应的处理方法,并会触发当前线程相关联的 Run Loop 退出,通过调用 runUntilDate:
方法
对于 Timer sources, 也会将事件传递到对应的处理方法,但不会导致当前 Run Loop 的退出
对于 Input sources, Run Loops 还会发送消息来报告自身的行为。可以通过监听 Run Loops 来接收这些信息