DispatchSourceTimer
是 GCD(Grand Central Dispatch)中的一个类,用于创建和管理定时器。它允许你在指定的队列上执行定时任务,类似于 Timer
,但具有更高的性能和更灵活的配置选项。
DispatchSourceTimer
是基于 GCD 构建的,利用了操作系统的底层机制,性能优于传统的 Timer
。DispatchSourceTimer
主要有以下几种类型:
DispatchSourceTimer
要终止一个 DispatchSourceTimer
,可以调用其 cancel()
方法:
timer.cancel()
要重新运行一个 DispatchSourceTimer
,需要重新创建一个新的定时器实例,并设置相应的参数:
let timer = DispatchSource.makeTimerSource(queue: DispatchQueue.global())
timer.setEventHandler {
// 定时任务逻辑
}
timer.schedule(deadline: .now() + delay, repeating: interval, leeway: .nanoseconds(0))
timer.resume()
原因:可能是由于定时器的事件处理程序仍在执行,或者定时器没有正确取消。
解决方法:
nil
以避免重复取消:timer.cancel()
timer = nil
原因:可能是由于定时器的参数设置不正确,或者在重新创建定时器时没有正确清理之前的定时器实例。
解决方法:
deadline
、repeating
和 leeway
等参数设置正确。以下是一个完整的示例代码,展示了如何终止并重新运行 DispatchSourceTimer
:
import Dispatch
var timer: DispatchSourceTimer?
func startTimer() {
timer = DispatchSource.makeTimerSource(queue: DispatchQueue.global())
timer?.setEventHandler {
print("定时器触发")
}
timer?.schedule(deadline: .now() + 1, repeating: 1, leeway: .nanoseconds(0))
timer?.resume()
}
func stopTimer() {
timer?.cancel()
timer = nil
}
func restartTimer() {
stopTimer()
startTimer()
}
// 启动定时器
startTimer()
// 终止定时器
// stopTimer()
// 重新启动定时器
// restartTimer()
如果你需要更多关于 DispatchSourceTimer
的信息或遇到其他问题,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云