ios - 取消初始化/无效定时器

标签 ios swift uinavigationcontroller swift3 nstimer

我试图在用户按下后退按钮时取消初始化/使计时器无效,但在推送到下一个 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()
    }
}

当用户按后退按钮时,它不起作用。

最佳答案

当您使用带有“目标/选择器”的计划计时器时,它会保留其目标。更具体地说,Runloop 保留预定的计时器,而计时器又保留其目标。

我使用这个版本,它不保留 self:

Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { [weak self] _ in
    self?.doSomethingRegularly()
})

并且您仍然需要在 deinit 中使上述计时器无效,否则您将泄漏计时器(但不会泄漏您的类)。

关于ios - 取消初始化/无效定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42016480/

相关文章:

ios - 向 iOS 应用程序添加共享扩展

ios - 向导航栏添加约束

swift - 打印数组的随机数(Swift)

objective-c - iOS 使用 navigationController popToRootViewControllerAnimated

ios - 删除 `UIImagePickerController` 缩放 slider

ios - News Feed 上的 Firebase Swift 分页

ios - watch 套件 App : Terminated due to memory error

ios - Storyboard中两个 View 之间的连续/转换,无需导航 Controller

ios - UINavigationController 和 "Pushing a navigation controller is not supported"异常?

ios - 如何将按钮添加到 iOS 14 小部件