为什么计时器和输入源的观察者通知在运行循环事件序列中实际发生之前被传递



我正在学习如何使用NSRunLoop和阅读苹果文档关于运行循环的章节。

我对文档如何说明事件的运行循环序列的一些描述感到困惑

因为计时器和输入源的观察者通知是在这些事件实际发生之前传递的,所以在通知的时间和实际事件的时间之间可能存在时间差。如果这些事件之间的时间至关重要,您可以使用sleep和wake-from-sleep通知来帮助您关联实际事件之间的时间

这里是文档链接

它表示计时器和输入源的观察者通知在这些事件实际发生之前被传递。既然这些事件还没有发生,那么运行循环如何知道这些事件即将发生,并提前为这些事件发送通知呢?

经过多次搜索,它可能会有所帮助。

文档在自定义输入源一节中说了以下内容。

除了定义事件到达时自定义源的行为外,还必须定义事件交付机制。源的这一部分运行在一个单独的线程上,负责向输入源提供其数据,并在数据准备好进行处理时向输入源发出信号。事件传递机制由您决定,但不必过于复杂。

详细信息link1和link2

事件可能发生,但该事件可能还没有准备好使用,因为该事件产生的实际数据在单独的线程上处理,可能不足以触发正在侦听该通知的线程。所以在run循环发出的通知和完成的发生事件之间有一个间隙。

还有其他过程会导致这个差距,例如定时器输入源等。

谁有更好的解释?

最新更新