虽然您可以将子秒的时间传递给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的秒设置一样。
有人能证实那是正确的吗?
发布于 2013-06-29 01:08:37
作为后续工作,我发现performSelector:withObject:afterDelay:工作得很好,并且没有在亚秒间隔内触发,因为我传递给它一个int延迟,如下所示:
int delay = 0.025; // 25 msec
[self performSelector:@selector(blahBlah:) withObject:nil afterDelay:delay];好吧,我的错!然而,这导致了另一个观察--我认为编译器在没有显式强制转换的情况下将double转换为int时会报告“精度损失”。然而,事实并非如此。当心!
发布于 2013-06-28 19:15:17
如果您使用performSelector:withObject:afterDelay:将延迟设置为100毫秒(0.100),则不会在2或3毫秒内触发延迟。它将在100毫秒后排定在运行循环上,等待运行循环有机会执行。所以它可能在102或103毫秒后被发射。
https://stackoverflow.com/questions/17371732
复制相似问题