gpt4 book ai didi

objective-c - NSTimer 的精度

转载 作者:太空狗 更新时间:2023-10-30 03:39:32 29 4
gpt4 key购买 nike

我正在尝试使用 NSTimer 创建一个每 0.1 秒递增一次的秒表式计时器,但有时它似乎运行得太快了。

我是这样做的:

Timer =[NSTimer scheduledTimerWithTimeInterval: 0.1 target:self selector:@selector(updateTimeLabel) userInfo:nil repeats: YES];

然后:

-(void)updateTimeLabel
{
maxTime=maxTime+0.1;
timerLabel.text =[NSString stringWithFormat:@"%.1f Seconds",maxTime];
}

这将在 Label 中显示计时器的值,我稍后可以利用 maxTime 作为计时器停止的时间......

问题是它运行的很不准确。

有没有一种方法可以确保 NSTimer 准确地每 0.1 秒触发一次?我知道 NSTimer 不准确,我要求进行调整以使其准确。

谢谢

最佳答案

根据NSTimer文档,它并不意味着准确。

Because of the various input sources a typical run loop manages, the effective resolution of the time interval for a timer is limited to on the order of 50-100 milliseconds. If a timer’s firing time occurs during a long callout or while the run loop is in a mode that is not monitoring the timer, the timer does not fire until the next time the run loop checks the timer. Therefore, the actual time at which the timer fires potentially can be a significant period of time after the scheduled firing time.

您可能想要使用 dispatch_after来自 GCD 的函数,由 official documentation 建议为了这个确切的目的(创建一个计时器)。

If you want to perform a block once after a specified time interval, you can use the dispatch_after or dispatch_after_f function.


顺便说一下,我同意 Caleb 的回答。如果您不像现在那样累积错误,您可能会解决您的问题。如果您存储开始日期并在每次迭代时使用 -timeIntervalSince: 方法重新计算时间,无论计时器精度如何,您最终都会获得准确的 UI 更新。

关于objective-c - NSTimer 的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17414344/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com