gpt4 book ai didi

cocoa - 当 runloop 被阻塞时 NSTimer 不会触发

转载 作者:行者123 更新时间:2023-12-03 16:01:25 24 4
gpt4 key购买 nike

我的应用程序即将完成,测试版测试在秒表部分发现了一个错误...秒表使用 ntimer 进行计数,并有一个用于存储圈数的表格,但是当滚动圈数表时, watch 会停止或暂停,并且不会弥补损失的时间。

通过使用以下方法消除了这种停顿:

startingTime = [[NSDate date] timeIntervalSince1970];

计算耗时。

但我仍然使用 NSTimer 每 0.1 秒触发一次,这意味着滚动仍然会停止计时器,即使耗时最终会正确更新......并将其与 Apple 秒表进行比较,这让我想知道秒表是否有一个单独的线程专门用于计算耗时。有谁知道这是如何做到的吗?

现在,从某种意义上说,使用纪元以来的时间效果很好,但它使启动、停止和重新启动秒表的问题变得复杂

当 watch 停止时,时间会被存储并用于计算 watch 重新启动时的偏移量,但似乎会引入一些延迟,并且当 watch 重新启动时时间会明显提前。

任何关于根本原因或解决方案的想法将不胜感激。

最佳答案

bbum 的答案提供了一种更好的方法来设计应用程序,但是如果您希望无论用户是否正在操作 UI,计时器都会触发,您需要将其添加到运行循环的跟踪模式中。

假设您正在为 iPhone 进行开发,该模式为 UITrackingRunLoopMode。如果您正在为 Mac 进行开发,则有一个类似名称的 NSEventTrackingRunLoopMode

NSRunLoop *runloop = [NSRunLoop currentRunLoop];
NSTimer *timer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(myTimerAction:) userInfo:nil repeats:YES];
[runloop addTimer:timer forMode:NSRunLoopCommonModes];
[runloop addTimer:timer forMode:UITrackingRunLoopMode];

关于cocoa - 当 runloop 被阻塞时 NSTimer 不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1995825/

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