runloop如何实际工作

时间:2011-02-18 17:08:41

标签: iphone nsthread runloop

本月早些时候,我问了这个问题'What is a runloop?'在阅读了答案并做了一些尝试后,我得到了它的工作,但我仍然完全不明白。如果一个runloop只是一个与一个线程关联的循环而且它不会在后台产生另一个线程,那么我的线程中的任何其他代码(mainthread保持简单)如何执行而不会被“阻塞”/不运行因为它在某个地方造成无限循环?

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

如果我在使用了这个之后得到了一些正确的东西,但是没有完全理解它,那么runloop是一个循环,你可以附加'flags'来通知runloop,当它到达旗帜所在的位置时,它“停止“并执行该点附加的任何处理程序?然后它继续在que中运行到下一个。

runloop

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

2 个答案:

答案 0 :(得分:1)

“排序。”

您是否阅读过this particular documentation

它深入探讨了运行循环的体系结构和操作。 - / p>

答案 1 :(得分:1)

如果一个运行循环 会调度一个花费太长时间或永远循环的方法,那么它将被阻止。

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

否则,在控件返回到运行循环之前,东西会被阻塞。