代码之家  ›  专栏  ›  技术社区  ›  Vishwanath Deshmukh

如何确保类中只运行一个计时器实例?

  •  0
  • Vishwanath Deshmukh  · 技术社区  · 5 年前

    我在里面启动计时器 ParentView scheduledTask 方法。

    类MyTimer{

    weak var delegate: ParentViewDelegate?
    
    private var timer: Timer?
    
    func start() {
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(scheduledTask), userInfo: nil, repeats: true)
        timer?.fire()
    }
    
    @objc private func scheduledTask() {
       print("timer call this per seconds")
    }
    
    func stop() {
        timer?.invalidate()
        timer = nil
    }
    
    final class VideoPlayerContainer: UIView {
    
        // MARK: - Properties
        private var mytimer: Mytimer? = Mytimer()
    }
    

    0 回复  |  直到 5 年前
        1
  •  2
  •   Paulw11    5 年前

    在开始新的计时器之前,只需检查是否已经有计时器;

    func start() {
        guard timer == nil else {
            return
        }
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(scheduledTask), userInfo: nil, repeats: true)
        timer?.fire()
    }
    

    或者,在启动新计时器之前,使任何现有计时器无效;

    func start() {
        timer?.invalidate()
        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(scheduledTask), userInfo: nil, repeats: true)
        timer?.fire()
    }