美文网首页
Swift中Timer

Swift中Timer

作者: 向日葵的夏天_summer | 来源:发表于2018-11-21 14:13 被阅读0次

    1.初始化定时器

    timer = Timer.scheduledTimer(timeInterval: 3.0, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true)
    

    2.暂停,开启定时器

    timer?.fireDate = Date.distantFuture    // 暂停
    timer?.fireDate = Date.init(timeIntervalSinceNow: 3.0) //3秒后开启
    

    3.停止定时器

    timer?.invalidate()
    

    4.在滑动页面上的列表时,timer会暂停的原因,以及解决办法

    • 原因

    在滑动时 当前线程的runloop切换了mode用于列表滑动,导致timer暂停;runloop中的mode主要用来指定事件在runloop中的优先级,默认是default;

    • 解决
      • 方法一:

        将timer加入到runloop的commonModes中,

          RunLoop.current.add(timer!, forMode: .commonModes)
        
      • 方法二:

        将timer放在另外一个线程中,然后开启另外一个线程的runloop,这样可以保证与主线程互不干扰,

          DispatchQueue.global().async {
              self.timer = Timer.scheduledTimer(timeInterval: 3.0, target: self, selector: #selector(self.timerAction), userInfo: nil, repeats: true)
              RunLoop.current.run()
          }
        

    相关文章

      网友评论

          本文标题:Swift中Timer

          本文链接:https://www.haomeiwen.com/subject/oiqcqqtx.html