Deinit / 无效定时器
Deinit / Invalidate Timer
我正在尝试 deinit/invalidate Timer
当用户按下后退按钮而不是当他按下一个按钮时 ViewController。
var timer = Timer()
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timePrinter), userInfo: nil, repeats: true)
timer.fire()
override func viewWillDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
if self.isMovingFromParentViewController{
timer.invalidate()
}
}
当用户按下后退按钮时它不工作。
不要让定时器在viewWillDisappear(_:)
中失效。创建一个 deinit 方法并将其放在那里。当您按下后退按钮时,当前视图控制器应该被释放并且 deinit 方法将被触发。
deinit {
timer.invalidate()
}
当您使用带有 'target/selector' 的预定计时器时,它会保留其目标。更具体地说,Runloop 保留预定的计时器,而计时器又保留它们的目标。
我用的是这个版本,不保留自我:
Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { [weak self] _ in
self?.doSomethingRegularly()
})
并且您仍然需要在 deinit 中使上述计时器无效,否则您会泄漏计时器(但不是 您的 class)。
我正在尝试 deinit/invalidate Timer
当用户按下后退按钮而不是当他按下一个按钮时 ViewController。
var timer = Timer()
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timePrinter), userInfo: nil, repeats: true)
timer.fire()
override func viewWillDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
if self.isMovingFromParentViewController{
timer.invalidate()
}
}
当用户按下后退按钮时它不工作。
不要让定时器在viewWillDisappear(_:)
中失效。创建一个 deinit 方法并将其放在那里。当您按下后退按钮时,当前视图控制器应该被释放并且 deinit 方法将被触发。
deinit {
timer.invalidate()
}
当您使用带有 'target/selector' 的预定计时器时,它会保留其目标。更具体地说,Runloop 保留预定的计时器,而计时器又保留它们的目标。
我用的是这个版本,不保留自我:
Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { [weak self] _ in
self?.doSomethingRegularly()
})
并且您仍然需要在 deinit 中使上述计时器无效,否则您会泄漏计时器(但不是 您的 class)。