溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS 高性能定時器解決方案

發(fā)布時間:2020-07-22 13:02:11 來源:網絡 閱讀:1609 作者:柯木超 欄目:移動開發(fā)

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


項目用的是swift3.0  


1、解決思路:

創(chuàng)建一個定時器的類,這個系統也就這一個定時器,定時器里面有一個代理方法,然后定時器執(zhí)行的方法就是執(zhí)行者個代理,那個需要用到定時器的界面,就去繼承這個代理,然后實現代理的方法就行。


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)"

    }

}



向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI