温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

iOS 高性能定时器解决方案

发布时间:2020-07-22 13:02:11 来源:网络 阅读:1592 作者:柯木超 栏目:移动开发

最近在做一个电商项目,因为有很多界面有打折商品,打折商品会时间限制,所以里面用到了大量的定时器来算倒计时。每一个页面就是一个定时器。觉得太耗性能,想到了一个比较节约性能的方式。全局就一个定时器,控制全部的界面的倒计时。


项目用的是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)"

    }

}



向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI