最小化后,NSTimer会变慢并暂停

时间:2018-09-10 18:23:12

标签: objective-c macos grand-central-dispatch nstimer nsthread

我一直在寻找这个答案,很惊讶我还没有发现任何东西。

我拥有的是一个具有超简单计时器功能的应用程序;启动时钟计时器,秒数开始点击。如果应用位于前台,则计时器每秒触发一次,然后相应地更新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世界中寻找了类似的东西,但无济于事。

所以...打我-我在这里到底在做什么错?!?

0 个答案:

没有答案