本月早些时候,我问了这个问题'What is a runloop?'在阅读了答案并做了一些尝试后,我得到了它的工作,但我仍然完全不明白。如果一个runloop只是一个与一个线程关联的循环而且它不会在后台产生另一个线程,那么我的线程中的任何其他代码(mainthread保持简单)如何执行而不会被“阻塞”/不运行因为它在某个地方造成无限循环?
这是第一个问题。然后到我的第二个。
如果我在使用了这个之后得到了一些正确的东西,但是没有完全理解它,那么runloop是一个循环,你可以附加'flags'来通知runloop,当它到达旗帜所在的位置时,它“停止“并执行该点附加的任何处理程序?然后它继续在que中运行到下一个。
因此,在这种情况下,没有事件放在连接中的que中,但是当它涉及事件时,它会采取与tap 1相关联的任何操作并在它再次运行到连接之前执行它,依此类推。或者我可以理解这个概念吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
如果一个运行循环 会调度一个花费太长时间或永远循环的方法,那么它将被阻止。
这就是为什么iPhone应用程序想要做的所有事情都不适合UI运行循环的1“滴答”(比如某些动画帧速率或UI响应率),以及任何空间其他事件处理程序需要在同一个“tick”中完成,要么异步分解,要么分派到另一个线程执行。
否则,在控件返回到运行循环之前,东西会被阻塞。