gpt4 book ai didi

ios - 如何在swift中实现优化的多个计时器?

转载 作者:行者123 更新时间:2023-11-30 12:26:06 25 4
gpt4 key购买 nike

我只是想知道内存优化的多功能多计时器在 swift 中的最佳实现是什么。与 Dispatch 并发且具有弱引用的计时器?我尝试在一个 View Controller 中实现两个计时器,但出现错误。

我的一个计时器是这样的:

func startOnPlayingTimer() {

let queue = DispatchQueue(label: "com.app.timer")
onPlayTimer = DispatchSource.makeTimerSource(queue: queue)
onPlayTimer!.scheduleRepeating(deadline: .now(), interval: .seconds(4))
onPlayTimer!.setEventHandler { [weak self] in
print("onPlayTimer has triggered")
}
onPlayTimer!.resume()
}

另一个是:

 carouselTimer = Timer.scheduledTimer(timeInterval: 3, target: self,selector: #selector(scrollCarousel), userInfo: nil, repeats: true)

最佳答案

我认为任何应用程序都不需要多个计时器。如果您事先知道要触发哪些方法,请为需要触发的每个方法保留 bool 值,并保存一个 Int 来保存该方法的出现。您可以使用检查所需 bool 值及其相应方法的方法调用计时器一次。

引用上述逻辑的伪代码如下:

  class ViewController: UIViewController {


var myTimer : Timer!

var methodOneBool : Bool!
var methodTwoBool : Bool!
var mainTimerOn : Bool!


var mainTimerLoop : Int!
var methodOneInvocation : Int!
var methodTwoInvocation : Int!

override func viewDidLoad() {
super.viewDidLoad()
configure()
}

func configure(){
methodOneBool = false
methodTwoBool = false

methodOneInvocation = 5 // every 5 seconds
methodTwoInvocation = 3 //every 3 seconds

mainTimerOn = true // for disable and enable timer
mainTimerLoop = 0 // count for timer main
}

func invokeTimer(){
myTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(checkTimerMethod), userInfo: nil, repeats: true)
}


func checkTimerMethod(){

if(mainTimerOn){

if(mainTimerLoop % methodOneInvocation == 0 && methodOneBool){
// perform first method
// will only get inside this when
// methodOneBool = true and every methodOneInvocation seconds
}

if(mainTimerLoop % methodTwoInvocation == 0 && methodTwoBool){
// perform second method
// will only get inside this when
// methodTwoBool = true and every methodTwoInvocation seconds
}

mainTimerLoop = mainTimerLoop + 1

}
}

}

我希望这可以解决问题,如果我不明白您的要求,请在下面发表评论,以便我可以相应地编辑答案

关于ios - 如何在swift中实现优化的多个计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44200891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com