iOS dispatch_after 立即开火

iOS dispatch_after is firing immediately

我正在尝试使用 dispatch_after.

在 6 秒后触发一个事件

我正在发射一个常规的 dispatch_after 片段(内置于 Xcode 本身)。

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration + 0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [do something];
});

duration 是 6 秒。但是,[do something] 会立即执行(我在上面设置了一个断点)。我在 thread/main 主队列中。我做错了什么?

这是一个简单的运算符优先级错误。我的意图是传递一个持续时间参数,但(如果传递 0)也添加少量。 0.01 那里。

我错误地写了 duration + 0.01 * NSEC_PER_SEC 试图表示 (duration + 0.01) * NSEC_PER_SEC,但由于运算符优先级,它被解释为 duration + (0.01 * NSEC_PER_SEC)。我添加了括号,它开始正常工作了。