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

时间:2015-05-18 04:44:24

标签: objective-c cocoa nsrunloop

我正在学习如何使用NSRunLoop并阅读关于Run Loops的Apple Doc。

我对有关doc如何陈述有关事件的运行循环序列的描述感到困惑

  

由于计时器和输入源的观察者通知是在这些事件实际发生之前传递的,因此通知时间与实际事件的时间之间可能存在差距。如果这些事件之间的时间关系很重要,您可以使用睡眠和唤醒睡眠通知来帮助您关联实际事件之间的时间

Here is doc link

它表示定时器和输入源的观察者通知在这些事件实际发生之前传递。由于这些事件没有发生,运行循环如何知道这些事件即将发生并提前发送事件通知?

1 个答案:

答案 0 :(得分:0)

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

该文档说明了自定义输入源部分中的以下内容。

  

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

More details link1link2

事件可能发生,但该事件可能尚未准备好使用,导致该事件产生的实际数据(在单独的线程上处理)可能不足以触发正在侦听该通知的线程。因此,它们是运行循环发布的通知与完成的事件之间的差距。

还有其他进程导致这种差距,例如计时器输入源等。

任何人都有更好的解释?