Ale*_*ec. 4 xcode timer ios swift swift3
我有一个在 viewDidLoad 中运行的计时器
_ = Timer.scheduledTimer(timeInterval: 10,
target: self,
selector: #selector(timerFired),
userInfo: nil,
repeats: true)
Run Code Online (Sandbox Code Playgroud)
计时器工作正常,问题是因为 viewDidLoad 被多次调用,计时器重复。
有没有办法确保我的计时器只运行一次?
您需要保留对计时器的引用,以便在 viewController 消失时使其无效。否则它只会继续运行,并且每次创建另一个 viewController 时都会产生新的计时器。
var timer:Timer?
override func viewDidLoad() {
super.viewDidLoad()
timer = Timer.scheduledTimer(timeInterval: 1,
target: self,
selector: #selector(timerFired),
userInfo: nil,
repeats: true)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
if let timer = timer {
timer.invalidate()
}
}
Run Code Online (Sandbox Code Playgroud)
根据您的导航逻辑viewWillDisappear在视图被解除分配之前可能会被多次调用,您必须自己决定处理这个问题的最佳方式。
| 归档时间: |
|
| 查看次数: |
1913 次 |
| 最近记录: |