swift - 添加定時器
阿新 • • 發佈:2018-11-22
pen imei bject block setevent swift ini 狀態 tin
mport UIKit /// 控制定時器的類 class ZDTimerTool: NSObject { /// 定時器 // private var timer: Timer? /// GCD定時器 private var GCDTimer: DispatchSourceTimer? /// GCD定時器的掛起狀態 private var isSuspend: Bool = false override init() { super.init() } deinit { // 對象在銷毀前會銷毀定時器,所以使用定時器應該設置全局的屬性 // self.invaliTimer() self.invaliGCDTimer() DDLOG(message: "deinit: ZDTimerTool") } } /// GCD定時器相關方法 extension ZDTimerTool{ /// 初始化得到GCD定時器 func DispatchTimer(timeInterval: TimeInterval , handleBlock:@escaping (() -> Void)) { if self.GCDTimer == nil { self.GCDTimer = DispatchSource.makeTimerSource(flags: [], queue: DispatchQueue.main) self.GCDTimer?.schedule(deadline: DispatchTime.now(), repeating: timeInterval) self.GCDTimer?.setEventHandler{ DispatchQueue.main.async { handleBlock() } } self.GCDTimer?.resume() self.GCDTimer?.schedule(deadline: DispatchTime.now(), repeating: timeInterval) }else{ self.stopOrResumeGCDTimer(isStop: false) } } /// 暫停或者重啟GCDTimer func stopOrResumeGCDTimer(isStop: Bool){ guard self.isSuspend != isStop else { return } isStop == true ? self.GCDTimer?.suspend() : self.GCDTimer?.resume() self.isSuspend = isStop } /// 銷毀GCD定時器 func invaliGCDTimer() { if self.isSuspend == true { self.GCDTimer?.resume() } self.GCDTimer?.cancel() //銷毀前不能為suspend(掛起狀態) self.GCDTimer = nil } }
2.使用
swift - 添加定時器