How do I create a NSTimer on a background thread?

前端 未结 10 657
感情败类
感情败类 2020-11-28 02:04

I have a task that needs to be performed every 1 second. Currently I have an NSTimer firing repeatedly every 1 sec. How do I have the timer fire in a background thread (no

10条回答
  •  醉酒成梦
    2020-11-28 02:34

    My Swift 3.0 solution for iOS 10+, timerMethod() will be called in background queue.

    class ViewController: UIViewController {
    
        var timer: Timer!
        let queue = DispatchQueue(label: "Timer DispatchQueue", qos: .background, attributes: .concurrent, autoreleaseFrequency: .workItem, target: nil)
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            queue.async { [unowned self] in
                let currentRunLoop = RunLoop.current
                let timeInterval = 1.0
                self.timer = Timer.scheduledTimer(timeInterval: timeInterval, target: self, selector: #selector(self.timerMethod), userInfo: nil, repeats: true)
                self.timer.tolerance = timeInterval * 0.1
                currentRunLoop.add(self.timer, forMode: .commonModes)
                currentRunLoop.run()
            }
        }
    
        func timerMethod() {
            print("code")
        }
    
        override func viewDidDisappear(_ animated: Bool) {
            super.viewDidDisappear(animated)
            queue.sync {
                timer.invalidate()
            }
        }
    }
    

提交回复
热议问题