Ответ 1
Убедитесь, что таймер не выходит за рамки. В отличие от NSTimer
, вам необходимо поддерживать сильную ссылку на ваши таймеры GCD, например:
var timer: DispatchSourceTimer?
private func startTimer() {
let queue = DispatchQueue(label: "com.firm.app.timer", attributes: .concurrent)
timer?.cancel() // cancel previous timer if any
timer = DispatchSource.makeTimerSource(queue: queue)
timer?.schedule(deadline: .now(), repeating: .seconds(5), leeway: .milliseconds(100))
// or, in Swift 3:
//
// timer?.scheduleRepeating(deadline: .now(), interval: .seconds(5), leeway: .seconds(1))
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?.resume()
}
private func stopTimer() {
timer?.cancel()
timer = nil
}