【问题标题】:Cocoa - NSTimer initWithFireDate: multiple seconds too late?Cocoa - NSTimer initWithFireDate:迟了几秒?
【发布时间】:2013-12-10 15:14:29
【问题描述】:

我有一个简单的应用程序,它(目前)除了创建一个计时器之外所做的事情不多:

     _time = [[NSTimer alloc] initWithFireDate: _nextDate
                                 interval: 0.0f
                                   target: self
                                 selector: @selector(trackTime)
                                 userInfo: nil
                                  repeats: NO];
[[NSRunLoop currentRunLoop] addTimer:_time forMode:NSRunLoopCommonModes];

在 trackTime 函数中,我检查了规定的触发日期 (_nextDate) 与实际触发日期之间的差异:

     NSTimeInterval secondsBetween = [_nextDate timeIntervalSinceDate:[NSDate date]];

从结果来看,调用函数似乎晚了 2 到 4 秒。

这正常吗?我需要不同的运行循环模式吗?我还能做些什么来获得更好的时机吗?

【问题讨论】:

    标签: objective-c cocoa nsdate nstimer nsrunloop


    【解决方案1】:

    NSTimer 不保证间隔,因为它依赖于运行循环机制。你可以看到关于runloop的详细信息(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1

    也许你可以试试 GCD 的 dispatch_after。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2018-04-08
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多