我一直在寻找这个答案,很惊讶我还没有发现任何东西。
我拥有的是一个具有超简单计时器功能的应用程序;启动时钟计时器,秒数开始点击。如果应用位于前台,则计时器每秒触发一次,然后相应地更新UI。
如果我将其最小化或进入背景,则大约30秒后...选择器动作仅每10到20秒触发一次...我还没有坐下来测试间隔的间隔时间,但显然超过1秒。
我已经简化了以下代码,以消除所有不必要的用户界面。 .stringValue
具有更好的可读性。所以这就是我所拥有的:
@property (assign) int seconds;
@interface ViewController : NSViewController {
NSTimer *myTimer;
bool timerRunning;
}
-(void)btnAction {
myTimer = [NSTimer
scheduledTimerWithTimeInterval: 1.0
target: self
selector: @selector(timerAction)
userInfo: nil
repeats: YES];
}
-(void)timerAction {
_seconds++;
NSLog(@"seconds: %d", _seconds);
}
我也对GCD有所了解:
dispatch_async(dispatch_get_main_queue(), ^{
myTimer = [NSTimer
scheduledTimerWithTimeInterval: 1.0
target: self
selector: @selector(timerAction)
userInfo: nil
repeats: YES];
});
但是最终得到了相同的结果。
最后...我在iOS上有一个类似(尽管有所不同)的应用程序,但在将其添加到AppDelegate之后,也解决了类似问题:
[[UIApplication sharedApplication]
setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
我在macOS世界中寻找了类似的东西,但无济于事。
所以...打我-我在这里到底在做什么错?!?