在阅读了NSRunLoop的文档之后,我不是很理解。我正在生成一个辅助线程,其中包含一个每隔1秒启动一次的NSTimer。它使用performSelectorOnMainThread更新屏幕上的标签。
然而,为了让它工作,我需要一个运行循环,但我不理解它的概念?
有谁可以试着解释一下吗?
谢谢。
发布于 2011-02-10 01:14:39
运行循环是有效的:
while(... get an event ...)
... handle event ...;它在一个线程上运行;主线程有一个主事件循环,在那里处理用户事件和大多数UI绘制等。documentation explains it in detail。
然而,在您的例子中,您不需要线程。
听起来您所做的一切都是定期更新UI中的标签;这并不是计算密集型的事情。
只需在主线程中安排计时器,并完成它。不需要启动线程,不需要使用performSelectorOnMainThread:,也不需要保证线程间的数据一致性。
对不起--没听懂你的问题。
在内部,run循环的工作原理是在run循环中放置一个标志,上面写着“经过这段时间后,启动计时器”。不涉及额外的线程,更好的是,它不会轮询来检查时间。可以将run循环看作是有效地维护时间线。它会被动地让时间流逝,直到在时间线上找到感兴趣的东西(都没有轮询--轮询太糟糕了。要避免。)
然而,这确实意味着计时器永远不会100%准确。同样,如果你有一个计时器每秒钟重复一次,它会随着时间的推移而漂移。
而且;而不是直接触发绘制事件。您的计时器应该使需要更新的视图无效,然后让底层对象处理何时是实际更新屏幕的最佳时机。
发布于 2011-02-10 00:27:01
This page很好地解释了这一点。FTA:
运行循环本质上是在单个线程上运行的事件处理循环。您可以在其上注册潜在的输入源,并将其指向每当输入在这些源上可用时应执行的代码。
https://stackoverflow.com/questions/4947556
复制相似问题