iOS 高性能定時器解決方案

最近在做一個電商項目,因爲有很多界面有打折商品,打折商品會時間限制,所以裏面用到了大量的定時器來算倒計時。每一個頁面就是一個定時器。覺得太耗性能,想到了一個比較節約性能的方式。全局就一個定時器,控制全部的界面的倒計時。


項目用的是swift3.0  


1、解決思路:

創建一個定時器的類,這個系統也就這一個定時器,定時器裏面有一個代理方法,然後定時器執行的方法就是執行者個代理,那個需要用到定時器的界面,就去繼承這個代理,然後實現代理的方法就行。


2、代碼:

定時器類


import UIKit


protocol SSTTimerDelegate: class {

    func updateTime()

}

final class SSTTimer: NSObject {

    weak var delegate:SSTTimerDelegate?

    static var shared: SSTTimer {

        struct Static {

            static let instance: SSTTimer = SSTTimer()

        }

        return Static.instance

    }

    

    private override init() {

        super.init()

        Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(didTimerAlarm), userInfo: nil, repeats:true)

    }

    

    func didTimerAlarm() {

        

        self.delegate?.updateTime()


    }

}


其他要用到定時器的類:

1、


class ViewController: UIViewController {

    var i = 0

    @IBOutlet weak var timeLabel: UILabel!

    override func viewDidLoad() {

        super.viewDidLoad()

    }


    override func viewWillAppear(_ animated: Bool) {

         TimerUtil.shared.delegate = self

    }

}


extension ViewController: TimerDelegate {

    func updateTime() {

        i = i + 1;

        timeLabel.text = "\(i)"

    }

}



2、

class ViewThreeVC: UIViewController {

    var i = 0

    @IBOutlet weak var timeLabel: UILabel!

    override func viewDidLoad() {

        super.viewDidLoad()

      

    }

    override func viewWillAppear(_ animated: Bool) {

        TimerUtil.shared.delegate = self

    }

 

    

}

extension ViewThreeVC: TimerDelegate {

    func updateTime() {

        i = i + 1;

        timeLabel.text = "\(i)"

    }

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章