如何使放置在RunLoop上的Timer无效

时间:2016-11-03 18:04:59

标签: swift reference nstimer

在Swift应用程序中,我使用的是Timer。在创建Timer并将其插入Runloop后,我不想保留对Timer的引用。我希望能够使它无效。有没有办法在不保留参考的情况下做到这一点?

1 个答案:

答案 0 :(得分:3)

计时器的选择器可以保留对Timer对象的引用。试试这个:

class ViewController: UIViewController {
    var count = 0

    override func viewDidLoad() {
        super.viewDidLoad()

        let _ = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.timerFired(timer:)), userInfo: nil, repeats: true)
    }

    // Run the timers for 3 times then invalidate it
    func timerFired(timer: Timer) {
        if count < 3 {
            count += 1
            print(count)
        } else {
            timer.invalidate()
            print("Timer invalidated")
        }
    }
}