首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将执行选择:与对象:后延迟:工作时间低于1秒?

将执行选择:与对象:后延迟:工作时间低于1秒?
EN

Stack Overflow用户
提问于 2013-06-28 18:55:23
回答 2查看 2.4K关注 0票数 1

虽然您可以将子秒的时间传递给performSelector:withObject:afterDelay:,但似乎计时器将以最快的速度触发任何1秒以下的延迟。例如,如果我将延迟设置为100毫秒(0.100)或10毫秒(0.010),计时器仍将在2或3毫秒内触发。这是已知的限制吗?

对于执行器选择:withObject:afterDelay:,延迟的文档如下:

延迟-消息发送之前的最短时间。指定延迟为0并不一定会立即执行选择器。选择器仍然在线程的run循环中排队,并尽快执行。

将其与NSTimer进行比较,文档在其中读到:

秒-计时器触发之间的秒数。如果秒小于或等于0.0,则此方法将选择0.1毫秒的非负值。

在提供负值时,performSelector:withObject:afterDelay:使用它的延迟设置,就像NSTimer的秒设置一样。

有人能证实那是正确的吗?

EN

回答 2

Stack Overflow用户

发布于 2013-06-29 01:08:37

作为后续工作,我发现performSelector:withObject:afterDelay:工作得很好,并且没有在亚秒间隔内触发,因为我传递给它一个int延迟,如下所示:

代码语言:javascript
复制
int delay = 0.025; // 25 msec
[self performSelector:@selector(blahBlah:) withObject:nil afterDelay:delay];

好吧,我的错!然而,这导致了另一个观察--我认为编译器在没有显式强制转换的情况下将double转换为int时会报告“精度损失”。然而,事实并非如此。当心!

票数 1
EN

Stack Overflow用户

发布于 2013-06-28 19:15:17

如果您使用performSelector:withObject:afterDelay:将延迟设置为100毫秒(0.100),则不会在2或3毫秒内触发延迟。它将在100毫秒后排定在运行循环上,等待运行循环有机会执行。所以它可能在102或103毫秒后被发射。

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

https://stackoverflow.com/questions/17371732

复制
相关文章

相似问题

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