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


项目用的是swift3.0


1、解决思路:

创建一个定时器的类,这个系统也就这一个定时器,定时器里面有一个代理方法,然后定时器执行的方法就是执行者个代理,那个需要用到定时器的界面,就去继承这个代理,然后实现代理的方法就行。


2、代码:

定时器类


importUIKit


protocolSSTTimerDelegate:class{

funcupdateTime()

}

finalclassSSTTimer:NSObject{

weakvardelegate:SSTTimerDelegate?

staticvarshared:SSTTimer{

structStatic {

staticletinstance:SSTTimer=SSTTimer()

}

returnStatic.instance

}

privateoverrideinit() {

super.init()

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

}

funcdidTimerAlarm() {

self.delegate?.updateTime()


}

}


其他要用到定时器的类:

1、


classViewController:UIViewController{

vari =0

@IBOutletweakvartimeLabel:UILabel!

overridefuncviewDidLoad() {

super.viewDidLoad()

}


overridefuncviewWillAppear(_animated:Bool) {

TimerUtil.shared.delegate=self

}

}


extensionViewController:TimerDelegate{

funcupdateTime() {

i=i+1;

timeLabel.text="\(i)"

}

}



2、

classViewThreeVC:UIViewController{

vari =0

@IBOutletweakvartimeLabel:UILabel!

overridefuncviewDidLoad() {

super.viewDidLoad()

}

overridefuncviewWillAppear(_animated:Bool) {

TimerUtil.shared.delegate=self

}

}

extensionViewThreeVC:TimerDelegate{

funcupdateTime() {

i=i+1;

timeLabel.text="\(i)"

}

}