- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道如何让调度计时器在 Swift 3.0 中重复工作。我的代码:
let queue = DispatchQueue(label: "com.firm.app.timer",
attributes: DispatchQueue.Attributes.concurrent)
let timer = DispatchSource.makeTimerSource(flags: DispatchSource.TimerFlags(rawValue: UInt(0)),
queue: queue)
timer.scheduleRepeating(deadline: DispatchTime.now(),
interval: .seconds(5),
leeway: .seconds(1)
)
timer.setEventHandler(handler: {
//a bunch of code here
})
timer.resume()
计时器只触发一次,并且不会像应有的那样重复自身。我该如何解决这个问题?
最佳答案
确保计时器不会超出范围。与Timer
(您安排它的RunLoop
)不同,您需要维护自己的强引用,直到Timer
无效为止。引用您的 GCD 计时器,例如:
private var timer: DispatchSourceTimer?
private func startTimer() {
let queue = DispatchQueue(label: "com.firm.app.timer", attributes: .concurrent)
timer = DispatchSource.makeTimerSource(queue: queue)
timer?.setEventHandler { [weak self] in // `[weak self]` only needed if you reference `self` in this closure and you want to prevent strong reference cycle
print(Date())
}
timer?.schedule(deadline: .now(), repeating: .seconds(5), leeway: .milliseconds(100))
timer?.resume()
}
private func stopTimer() {
timer = nil
}
关于swift - DispatchSourceTimer 和 Swift 3.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41842933/
我有一个计时器: let queue = DispatchQueue(label: "com.domain.app.timer") timer = DispatchSource.makeTimerSo
我有一个奇怪的行为,即我的应用程序在返回到之前的 View Controller 后崩溃了。我有一个显示配置文件 Controller ,然后我去编辑配置文件 Controller 。我在那里录制了一
我正在尝试使用 DispatchSourceTimer 在另一个线程上运行重复计时器。这段代码在 Playground 上运行良好,但在我的 iOS 应用程序中,它总是在 deinit 方法上崩溃(或
我不知道如何让调度计时器在 Swift 3.0 中重复工作。我的代码: let queue = DispatchQueue(label: "com.firm.app.timer",
我不知道如何让调度计时器在 Swift 3.0 中重复工作。我的代码: let queue = DispatchQueue(label: "com.firm.app.timer",
我有一个正在运行的 DispatchSourceTimer 是用以下方法创建的: self.timer = DispatchSource.makeTimerSource(flags: .init(ra
我很难理解 DispatchSourceTimer 之间的主要区别, Timer和 asyncAfter (在我的例子中,调度一个需要每 X 秒运行一次的任务,尽管了解定时器的差异可能对有用)(或者除
我不知道如何让调度计时器在 Swift 3.0 中重复工作。我的代码: let queue = DispatchQueue(label: "com.firm.app.timer",
我是一名优秀的程序员,十分优秀!