无需停止计时器,请重新启动:它将导致迅速运行多个计时器

问题描述

我有如下功能

func startTimer() {
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    dispatchQueue.main.async {
        appDelegate.TIMER = Timer.scheduledTimer(withTimeInterval: self.REPEAT_TIME,repeats: true,block: { timer in                
            self.sendData(programID: self.MAIN_THREAD)
            do {
                try ...
            }
            catch let error {
                ...
            }
        })
    }
}

定时器停止功能

func stopTimer() {
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    if (appDelegate.TIMER != nil) {
        appDelegate.TIMER?.invalidate()
        appDelegate.TIMER = nil
    }
}

我想知道

  1. 如果我不停止就调用函数,是否有可能启动多个计时器实例?

  2. 在这种情况下,(这是否只停止了一个计时器并继续运行另一个计时器?)
    启动计时器→重新启动→停止

解决方法

如果我不停止就调用此函数,是否有机会启动多个计时器实例?

是的,startTimer将启动另一个计时器而不会停止前一个计时器,但是当您将其存储在属性TIMER中时,您将失去对先前安排的计时器的引用,因此将无法停止它直到结束。

在这种情况下呢(这是否只停止了一个计时器并继续运行另一个计时器?) 启动计时器→重新启动→停止

是的,它将停止上一次启动的计时器,所有其他先前启动的计时器将持续self.REPEAT_TIME