几天来,我一直在 Apple 文档和 Google 搜索中阅读有关 RunLoops
的内容。我已经在很大程度上理解了 RunLoops
的概念,但对于有关 RunLoops
的一些基本问题,我仍然没有答案。
Runloop
究竟是如何工作的?它是否类似于在某些系统级别运行的 while 循环?- 如果它确实是某种系统级别的 while 循环,那么它与轮询有何不同?
请为此提供一些建议..
最佳答案
关于 RunLoop(在其他平台上被称为窗口处理程序、主循环、事件循环)的全部意义在于它促进了事件驱动架构,其中应用程序仅在出现时运行是要做的事情——例如,响应用户交互。这与轮询相反。
该架构的基础是某种消息队列,线程可以阻塞该消息队列,直到有消息可供处理为止。在 MacOSX 和 iOS 系统上,队列是 Mach kernel RPC 端口
。在 Windows 上,它是一个内核 IPC 队列,在 X-windows 系统上,它是一个 unix 域或网络套接字。
事件由其他系统组件插入到队列中 - 例如窗口管理器和其他应用程序。应用程序从其他线程向自己发送消息以便在同一线程中执行所有 UI 处理也很常见。
运行循环本身驻留在应用程序空间中,看起来像这样:
while (!stop)
{
message = WaitForNextMessage();
DispatchMessage(message);
}
通常,无论您使用什么 UI 框架,都会提供一种机制来为特定类型的事件注册事件处理程序。
关于ios - RunLoop 如何减少 CPU 周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18288544/