NSTimer可靠的替代品

时间:2011-11-17 18:41:43

标签: iphone objective-c ios nstimer

我有一个应用程序应该每1秒记录一些事情,我现在正在使用NSTimer,但如果我的应用程序转换屏幕(或几乎任何其他事情,真的)它会减慢计时器的速度咬合读数不准确。

什么是可靠的替代品?我目前的代码如下:

timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(update) userInfo:nil repeats:YES];

2 个答案:

答案 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)

你可以:

  • 将NSTimer置于不同的线程中(可能不会受到UI的影响)
  • 减少间隔(例如0.1秒),并在记录功能中,检查是否是记录所需内容的“正确”时间。