3

RunLoops几天来,我一直在阅读Apple 文档和 Google 搜索中的内容。我在RunLoops很大程度上理解了这个概念,但我仍然没有回答一些关于RunLoops.

  1. 究竟是如何Runloop工作的?是否类似于在某个系统级别运行的 while 循环?
  2. 如果它确实是某个系统级别的某种 while 循环,那么它与轮询有何不同?

请为此提供一些指示..

4

1 回答 1

6

关于 RunLoop(在其他平台上被称为窗口处理程序、主循环、事件循环)的全部意义在于它促进了事件驱动架构,其中应用程序仅在有事可做时才运行 - 例如,响应用户交互。这与轮询相反。

该架构的基础是某种消息队列,线程可以阻塞该消息队列,直到有消息可供处理。在 MacOSX 和 iOS 系统上,队列是一个Mach 内核RPC port。在 Windows 上,它是一个内核 IPC 队列,而在 X-windows 系统上,它是一个 unix 域或网络套接字。

事件由其他系统组件(例如窗口管理器和其他应用程序)插入到队列中。应用程序也经常从其他线程向自己发送消息,以便在同一线程中执行所有 UI 处理。

运行循环本身驻留在应用程序空间中,看起来像这样:

while (!stop)
{
    message = WaitForNextMessage();
    DispatchMessage(message);
}

通常,您使用的任何 UI 框架都提供了一种为特定类型的事件注册事件处理程序的机制。

于 2013-08-17T12:17:41.900 回答