swift - 如何使放在 RunLoop 上的计时器失效

标签 swift reference nstimer

在 Swift 应用程序中,我使用计时器。我不喜欢在创建计时器并将其插入运行循环后保留对计时器的引用。我希望能够使其无效。有没有办法在不保留引用的情况下做到这一点?

最佳答案

计时器的选择器可以保留对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")
        }
    }
}

关于swift - 如何使放在 RunLoop 上的计时器失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40408387/

相关文章:

ios - 当 View Controller 消失时会调用 deinit 吗?

swift - 具有计算属性的协议(protocol)

ios - GameplayKit-[GKGraph dealloc] : crash on iOS9. 2

go - 当我在 Goroutine 中填充它时,为什么这张 map 是空的?

xcode - 跟踪时间(当应用程序关闭或在后台时)

crash - 当NSTimer触发reloadData并在iPad上的iOS 7中启用退信时,UICollectionView偶尔崩溃

string - Swift 字符串格式为十六进制,截断前两个字节

c++ - 在 C++ 的单个语句中通过非常量引用使用临时对象

encryption - 如果我包含 openssl,我的开源项目在某些国家/地区是否违法?

ios - NSTimer 和动画同步