gpt4 book ai didi

ios - 为什么我不能停止 NSTimer?

转载 作者:行者123 更新时间:2023-11-28 13:07:29 25 4
gpt4 key购买 nike

我完全碰壁了。这对我来说应该不会那么困难。我启动我的计时器,没问题。当我试图阻止它时,它继续前进。我试过以通常的方式使无效,但由于某种原因它基本上被忽略了。我做错了什么?!

代码:

var random = CGFloat()

var timer = NSTimer()

var counter = 0 as CGFloat

func startCountdown() {

counter = 0

random = CGFloat(Float(arc4random()) / Float(UINT32_MAX) * 5)

timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateCounter"), userInfo: nil, repeats: true)

}

func stopCountdown() {

timer.invalidate()

}

@IBAction func startGame(sender: AnyObject) {

startCountdown()

}

func updateCounter() {

counter++

println("counter: \(counter) random: \(random)")

}

@IBAction func tapped(sender: AnyObject) {

if counter >= random {

println("Good job")

stopCountdown()

//startCountdown()


} else {

println("Game over")

}

}

最佳答案

我想你有一个孤立的 NSTimer 卡在内存中。因为 NSTimer 是在运行循环中安排的,所以当您覆盖指向它们的实例变量时,它们不一定会被释放。

我期望发生的事情是,在第一次失效发生之前,您以某种方式安排了两次计时器。当您在 startCountdown() 中安排一个新计时器时,您会覆盖之前的计时器,但不会使其无效。如果你以某种方式调用了 startCountdown()/startGame() 两次,这意味着你有一个仍在触发的计时器,你的 stopCountdown 不能影响因为timer 实例变量现在指向不同的对象。

如果发生这种情况,修复很简单 - 只需在安排新计时器之前使 startCountdown() 中的旧计时器无效即可。

关于ios - 为什么我不能停止 NSTimer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32278207/

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