繁体   English   中英

为什么我不能停止NSTimer?

[英]Why can't I stop NSTimer?

我完全撞墙了。 这应该不像对我那么困难。 我启动计时器,没问题。 当我尝试停止它时,它一直在继续。 我已经尝试以通常的方式使之失效,但是由于某种原因,它基本上被忽略了。 我究竟做错了什么?!

码:

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因为timer实例变量现在指向另一个对象。

如果发生这种情况,修复很容易-只需在计划新计时器之前使startCountdown()的旧计时器无效startCountdown()

我有我的startButton启动一个NSTimer,同时tapped在同一时间启动另一个定时器。 我只是重新整理了一下应用程序。 我最初使用viewDidLoad()启动计时器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM