为什么' asyncAfter'是不是在确切的时间行动?

时间:2018-02-12 18:55:13

标签: swift

var turn = 0
 for pos in self.history {

    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .microseconds(Int(1000000 * turn))) {
        //////////
        //put stone in board
        ////////////
    }

    turn += 1
}

我使用DispatchQueue.main.asyncAfter方法在棋盘中设置具有确切间隔时间的宝石。

它适用于小石头。(每1秒1石) 但是板上的石头越来越多,它就不能正常工作了。(每2秒2块石头:同时放2块石头)

为什么会发生这种错误?

1 个答案:

答案 0 :(得分:1)

它位于方法名称中 - " async After "。该方法不保证在特定时间运行代码,它在特定时间后运行代码。这可能是在时间之后或之后可能会发生的。您应该将该方法视为含义"至少等待这么长时间"而不是"此时正好运行代码"。

如果您需要更精确的时间安排,请考虑使用Timer或创建DispatchSourceTimer