iPad / iOS计时问题

时间:2015-07-19 02:52:59

标签: ios objective-c ipad core-audio

最近有人和我联系了一下iPad节拍器,它有一些相当微妙的时间问题。我曾与许多OS X应用程序一起工作,这些应用程序没有时间问题 - 它们非常准确。

他所做的小组是面向UI的东西,我不确定他们是否知道如何在iOS上设置时间。我将从他们那里获得源代码,但我只是想确定iPad / iOS是否存在时序问题?

2 个答案:

答案 0 :(得分:1)

计时器的准确性取决于您使用的方法。如果他们使用的是NSTimer,那么Apple documentation

中所述的内容就不会非常准确
  

由于各种输入源,典型的运行循环管理,   定时器的时间间隔的有效分辨率限于开启   50-100毫秒的顺序。 ...因此,实际时间在   计时器可能发射的时间可能是一段很长的时间   在预定的开火时间之后。

然而,CADisplayLink与块回调配对是一种令人难以置信的准确的计时方法。检查他们正在使用哪一个,如果他们使用CADisplayLink,则重构为NSTimer

Semi-Sudo代码示例(从个人项目中删除):

- (CADisplayLink*)displayLink{
    _displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(timerFired:)];
    _displayLink.frameInterval = 1;// 1 = Fire every time the frame updates
    [_displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}

- (void)timerFired:(CADisplayLink*)displayLink {

    for (TTRunLoopCallbackRegistrant *registrant in _timerRegistrants) {

        if (registrant.target && registrant.callback) {
            registrant.callback();
        }
    }
}

答案 1 :(得分:0)

不幸的是,CADisplayLink只能给出整数值而不是浮点值。这意味着它无法运作。我需要看看客户是否希望我继续使用高精度定时器来查看它们是否有效。