如何确定我的计时器是否按计划进行?

时间:2018-06-08 16:48:58

标签: ios swift

我知道它是可以重入的,不会超越自己,但我需要知道它是否会陷入困境。

   init() {
            checkMoveTimer = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true, block: { _ in
                self.timeToMoveGroundTroups()
            })
        }

        func timeToMoveGroundTroups() {
            if gamePaused {
                return
            }

            for (_, vCache) in data.groundActive {
                data.groundObjects[vCache.index].next()
            }
        }

2 个答案:

答案 0 :(得分:1)

将每次调用操作(timeToMoveGroundTroups)的时间戳保存到实例属性中(在此之前)将当前时间戳与之比较。如果差异太大,您可以采取某种行动(日志,fatalError,无论如何)。

另一种方法是利用新的os_signpost日志记录来绘制仪器中发生的事情。

关于您展示的代码的另外两条评论:

  • 如果您提供tolerance,通常约为间隔的百分之十,您的计时器实际上会表现得更好

  • 你有一个保留周期会导致内存问题; self需要在匿名函数中声明unowned

答案 1 :(得分:0)

if !checkMoveTimer.valid {
 //TODO:
}

如果我理解正确的话。