gpt4 book ai didi

ios - Swift - 计时器不会停止

转载 作者:可可西里 更新时间:2023-10-31 23:57:32 24 4
gpt4 key购买 nike

我有以下代码:

class firstVC: UIViewController {
var timer : Timer?

func scheduledTimerWithTimeInterval(){
timer = Timer.scheduledTimer(timeInterval: 60, target: self,
selector: #selector(self.anotherFunc), userInfo: nil, repeats:
true)
}

override func viewDidAppear(_ animated: Bool) {
scheduledTimerWithTimeInterval()
}
}

我试图停止计时器但没有成功:

func stopTimer() {
if timer != nil {
timer?.invalidate()
timer = nil
}
}

override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
stopTimer()
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
stopTimer()
}

我什至尝试将停止功能放在 applicationWillResignActive 中而在 applicationDidEnterBackground 但它并没有停止:

firstVC().stopTimer()

非常感谢您的帮助,谢谢。

最佳答案

正如其他人所说,您正在创建多个计时器而不是在启动新计时器之前杀死旧计时器。您需要确保在启动新计时器之前停止任何当前计时器。

我所做的是让我的计时器变弱。然后我在尝试创建新计时器之前使用代码 `myTimer?.invalidate():

class firstVC: UIViewController {
weak var timer : Timer?

func scheduledTimerWithTimeInterval(){
timer?.invalidate()
timer = Timer.scheduledTimer(timeInterval: 60, target: self,
selector: #selector(self.anotherFunc), userInfo: nil, repeats:
true)
}
}

通过使您的计时器变弱,唯一保持对计时器的强引用的是运行循环。然后,当您使它无效时,它会立即被释放并设置为 nil。通过使用可选链接来调用 invalidate 方法,如果它已经为 nil,则它不会执行任何操作,并停止它并导致如果它正在运行则变为 nil。

请注意,只有当您使用 scheduledTimer() 工厂方法之一一次性创建计时器时,此方法才有效。如果您尝试先创建一个计时器,然后将其添加到运行循环中,则必须使用强局部变量来创建它,否则它会在您创建后立即释放。

关于ios - Swift - 计时器不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46611470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com