我目前正在使用下面提供的代码片段来每秒触发一些方法。我的应用程序在后台运行。问题是如果计算机在睡眠期后醒来,计时器想要追溯性地触发它错过的所有方法。如果用户要更改系统时钟时间,则会出现类似问题。
基本上我想实现正确的计时器方法,该方法将我的方法称为仅限每个当前的secon d。如果第二个(或分钟或小时或天)已经过去,并且由于某种原因未调用方法,我希望我的应用程序能够从当前时刻开始继续。
另外,我们可以在使用NSTimer时保留这个吗?
谢谢!
-(void)start
{
NSTimer * timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(tasks:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode: NSDefaultRunLoopMode];
}
答案 0 :(得分:0)
要处理睡眠问题,您可以取消注册,然后在机器进入睡眠状态并唤醒时重新注册计时器。有关如何执行此操作的信息,请参阅此technical note。但是,此解决方案不适用于更改系统时间。
答案 1 :(得分:0)
要处理大时间更改,您可以使用link UIApplicationSignificantTimeChangeNotification并取消注册/重新注册计时器。