Swift 5.x DispatchSourceTimer

swift下使用timer防止crash

  • 定義:
// Timer Suspend 狀態(tài)記錄
private var isSusspended: Bool = true
private lazy var autoLearnTimer: DispatchSourceTimer? = {
        let timer: DispatchSourceTimer = DispatchSource.makeTimerSource(flags: .strict, queue: DispatchQueue.global())
        timer.schedule(deadline: .now(), repeating: requestTimeInterVal)
        timer.setEventHandler { [weak self] in
            self?.loop()
        }
        return timer
    }()
  • 開始、暫停和銷毀
// MARK: timer 接口
extension ViewController {
    private func startTimer() {
        if isSusspended {
            self.autoLearnTimer?.resume()
        }
        isSusspended = false
    }

    private func stopTimer() {
        if isSusspended {
            return
        }
        isSusspended = true
        DispatchQueue.main.async {
            self.autoLearnTimer?.suspend()
        }
        print("停止定時器")
    }
    private func releaseTimer() {
        if isSusspended {
            self.autoLearnTimer?.resume()
        }
        self.autoLearnTimer?.cancel()
    }
}
deinit {
        releaseTimer()
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容