gpt4 book ai didi

swift - 为什么timer失效后还继续执行?

转载 作者:搜寻专家 更新时间:2023-10-31 22:26:48 25 4
gpt4 key购买 nike

如果您运行下面的代码,即使在我使计时器无效之后,计时器的剩余代码仍会在没有任何中断的情况下执行。 为什么?

是不是因为闭包对自身有强引用,一直保留到自己完全结束?还是别的?

这是否意味着在计时器执行期间使其无效没有任何作用?

class ViewController: UIViewController {

var timer : Timer?
let serialQueue = DispatchQueue(label: "com.createTimer.serial")

override func viewDidLoad() {
super.viewDidLoad()

serialQueue.sync { [weak self] in
self?.timer = Timer.scheduledTimer(withTimeInterval: 3, repeats: false, block: { [weak self] _ in
self?.someDummyFunc()
print("yyy")
print("\(self?.timer?.isValid)")
})
}
}

func someDummyFunc(){
print("\(timer?.isValid)")
print("xxx")
timer?.invalidate()
}
}

我运行这段代码得到的打印结果是:

Optional(true)
xxx
yyy
Optional(false) // timer.isValid is false !!!

然而我最初认为我会得到的是:

Optional(true)
xxx

最佳答案

scheduledTimer(withTimeInterval:repeats:block:)方法:

After interval seconds have elapsed, the timer fires, executing block.

invalidate()方法:

Stops the timer from ever firing again

您的发现是正确的,使计时器无效不会中断当前正在执行的 block ,而只会阻止该 block 将来的执行。

关于swift - 为什么timer失效后还继续执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45619749/

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