5

本月早些时候,我问了这个问题“什么是运行循环?” 在阅读了答案并做了一些尝试后,我让它工作了,但我仍然不完全理解它。如果runloop只是一个与线程相关联的循环并且它不会在幕后产生另一个线程,那么我的线程中的任何其他代码(为简单起见是主线程)如何执行而不会被“阻塞”/不运行因为它在某处造成了无限循环?

那是第一个问题。然后到我的第二个。

如果我在处理完这个问题后得到了一些正确的结果,但没有完全理解它,那么 runloop 是一个循环,您在其中附加“标志”,通知 runloop 当它到达标志所在的位置时,它会“停止”并且执行当时附加的任何处理程序?然后它继续运行到下一个队列。

运行循环

因此,在这种情况下,连接中没有事件被放置在 que 中,但是当涉及到事件时,它会采取与 tap 1 相关的任何操作并在它再次运行到连接之前执行它,依此类推。或者我是尽我所能理解这个概念吗?

4

2 回答 2

1

“有点。”

你读过这个特定的文档吗?

它对运行循环的体系结构和操作进行了相当深入的 - 相当彻底的深入研究。

于 2011-02-18T17:55:35.180 回答
1

如果调度一个耗时过长或永远循环的方法,运行循环将被阻塞。

这就是为什么 iPhone 应用程序会想要做所有不适合 UI 运行循环的 1 个“滴答”的事情(比如以某个动画帧速率或 UI 响应速率),并为任何其他事件处理程序留出空间这需要在同一个“tick”中完成,要么异步分解,​​要么分派到另一个线程执行。

否则东西会被阻塞,直到控制返回到运行循环。

于 2011-02-18T20:30:45.433 回答