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

非常感谢

最佳答案

您可以将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()

关于ios - Swift:如何使所有正在运行的计时器无效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51854306/

10-16 20:30