我有一个应用程序应该每1秒记录一些事情,我现在正在使用NSTimer
,但如果我的应用程序转换屏幕(或几乎任何其他事情,真的)它会减慢计时器的速度咬合读数不准确。
什么是可靠的替代品?我目前的代码如下:
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(update) userInfo:nil repeats:YES];
答案 0 :(得分:12)
NSTimer无法保证准时按时发射。但是你可以以比现在更可靠的方式使用NSTimer。当您使用scheduledTimerWithTimeInterval
时,您创建了一个NSTimer,它在NSDefaultRunLoopMode
的运行循环中进行了调度。在使用UI时,此模式暂停,因此在有用户交互时,您的计时器不会触发。要避免此暂停,请使用模式NSRunLoopCommonModes
。要做到这一点,你必须自己安排计时器:
timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(update) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
答案 1 :(得分:4)
你可以: