首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是runloop?

什么是runloop?
EN

Stack Overflow用户
提问于 2011-02-10 00:21:08
回答 2查看 14.6K关注 0票数 20

在阅读了NSRunLoop的文档之后,我不是很理解。我正在生成一个辅助线程,其中包含一个每隔1秒启动一次的NSTimer。它使用performSelectorOnMainThread更新屏幕上的标签。

然而,为了让它工作,我需要一个运行循环,但我不理解它的概念?

有谁可以试着解释一下吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-10 01:14:39

运行循环是有效的:

代码语言:javascript
复制
while(... get an event ...)
    ... handle event ...;

它在一个线程上运行;主线程有一个主事件循环,在那里处理用户事件和大多数UI绘制等。documentation explains it in detail

然而,在您的例子中,您不需要线程

听起来您所做的一切都是定期更新UI中的标签;这并不是计算密集型的事情。

只需在主线程中安排计时器,并完成它。不需要启动线程,不需要使用performSelectorOnMainThread:,也不需要保证线程间的数据一致性。

对不起--没听懂你的问题。

在内部,run循环的工作原理是在run循环中放置一个标志,上面写着“经过这段时间后,启动计时器”。不涉及额外的线程,更好的是,它不会轮询来检查时间。可以将run循环看作是有效地维护时间线。它会被动地让时间流逝,直到在时间线上找到感兴趣的东西(都没有轮询--轮询太糟糕了。要避免。)

然而,这确实意味着计时器永远不会100%准确。同样,如果你有一个计时器每秒钟重复一次,它会随着时间的推移而漂移。

而且;而不是直接触发绘制事件。您的计时器应该使需要更新的视图无效,然后让底层对象处理何时是实际更新屏幕的最佳时机。

票数 31
EN

Stack Overflow用户

发布于 2011-02-10 00:27:01

This page很好地解释了这一点。FTA:

运行循环本质上是在单个线程上运行的事件处理循环。您可以在其上注册潜在的输入源,并将其指向每当输入在这些源上可用时应执行的代码。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4947556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档