今天写项目时候使用到定时器于是使用了Dispatch方法实现,但是发现怎么都不会走回调
错误代码
let timer = DispatchSource.makeTimerSource(flags: [], queue: DispatchQueue.global())
timer.schedule(deadline: .now(), repeating: .seconds(1))
timer.setEventHandler(handler: {
print("-------------")
})
timer.resume()
这样无法进去回调函数的 print不会打印
正确写法
// 将timer定义为全局变量
var timer: DispatchSourceTimer?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
timer = DispatchSource.makeTimerSource(flags: [], queue: DispatchQueue.global())
timer?.schedule(deadline: .now(), repeating: .seconds(1))
timer?.setEventHandler(handler: {
print("-------------")
})
timer?.resume()
}
同时发现如果是创建的命令行项目即使是把DispatchSourceTimer定义为全局变量也是无法执行回调的,,原因未知。还请知道的大佬不吝赐教😆
网友评论