Swift:如何使所有正在运行的计时器无效?

时间:2018-08-15 07:05:09

标签: ios iphone swift xcode

我目前正在从事其他第三方开发人员可以向iOS应用添加功能的项目。因此,当对象实例已被删除时,我不希望它们启动计时器并稍后再执行某些操作。因此,有一种方法可以使所有正在运行的计时器或某些正在运行的计时器无效,而无需对其进行引用。如果没有,我可以通过其他任何方式为开发人员启用计时器功能,但阻止他们在其“区域”之外使用它们。我应该覆盖计时器还是更好的建议?

非常感谢

1 个答案:

答案 0 :(得分:1)

您可以继承Timer的类,并拥有一个共享实例,该实例存储了当前正在使用的所有计时器。每当需要计时器时,都必须使用CustomTimer而不是Timer

class CustomTimer: Timer {

    static var sharedTimers: [CustomTimer] = []

    static func invalidateAllTimers() {
        for timer in CustomTimer.sharedTimers {
            timer.invalidate()
        }
    }

    // Use appropriate initializer and super calls.
    init() {
        CustomTimer.sharedTimers.append(self)
    }

    deinit {
        CustomTimer.sharedTimers.removeAll { (timer) -> Bool in
            return timer === self
        }
    }
}

现在,您可以使用invalidateAllTimers方法使所有计时器失效。

CustomTimer.invalidateAllTimers()