RunLoop如何减少CPU周期

时间:2013-08-17 11:58:26

标签: ios objective-c nsrunloop

我在Apple文档和谷歌搜索中已经阅读了几天RunLoops。我在很大程度上理解了RunLoops的概念,但我仍然没有回答关于RunLoops的一些基本问题。

  1. Runloop究竟如何运作?是否类似于while循环在某个系统级别运行?
  2. 如果在某个系统级别确实存在某种while循环,那么它与轮询有何不同?
  3. 请为我提供一些指示..

1 个答案:

答案 0 :(得分:6)

关于RunLoop(不同地称为Window Handler,主循环,其他平台上的事件循环)的重点在于它促进了一个事件驱动架构,其中应用程序仅在那里运行是可以做的事情 - 例如,响应用户交互。这与民意调查相反。

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

事件由其他系统组件插入队列 - 例如Window Manager和其他应用程序。应用程序通常从其他线程发送消息以便在同一线程中执行所有UI处理。

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

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

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