我在Apple文档和谷歌搜索中已经阅读了几天RunLoops
。我在很大程度上理解了RunLoops
的概念,但我仍然没有回答关于RunLoops
的一些基本问题。
Runloop
究竟如何运作?是否类似于while循环在某个系统级别运行?请为我提供一些指示..
答案 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框架都提供了为特定类型的事件注册事件处理程序的机制。