Swift 为什么';asyncAfter';不是在准确的时间行动吗?

Swift 为什么';asyncAfter';不是在准确的时间行动吗?,swift,Swift,我使用DispatchQueue.main.asyncAfter方法在板中设置具有精确间隔时间的石头 它适用于小石块。(每秒1块石头) 但是棋盘上的石头越来越多,它就不能正常工作了。(每秒2块石头:同时放置2块石头) 为什么会发生此错误?它就在方法名称中--“asyncAfter”。该方法不保证在特定时间运行代码,而是在特定时间后运行代码。那可能是在时间之后,也可能是以后。您应该认为该方法的意思是“至少等待这么长时间”,而不是“此时正好运行代码” 如果需要更精确的计时,请考虑使用Timer或创建

我使用DispatchQueue.main.asyncAfter方法在板中设置具有精确间隔时间的石头

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


为什么会发生此错误?

它就在方法名称中--“asyncAfter”。该方法不保证在特定时间运行代码,而是在特定时间后运行代码。那可能是在时间之后,也可能是以后。您应该认为该方法的意思是“至少等待这么长时间”,而不是“此时正好运行代码”

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

var turn = 0
 for pos in self.history {

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

    turn += 1
}