ios - 确保两个计时器的执行逻辑不会同时运行

标签 ios swift timer runloop

我有两个计时器,它们以不同的时间间隔运行,其中一个添加到运行循环中。

let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
    // do some stuff
}

let timer2 = Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true) { timer in
    // do some other stuff
}
RunLoop.current.add(timer2, forMode: RunLoop.Mode.common)

我有一个条件,要求两个计时器的执行逻辑不能同时运行,因为它们都在修改相同的数据结构。

iOS已经保证了吗?如果没有,确保这种情况发生的最佳方法是什么?

最佳答案

只要您将计时器安排在相同的RunLoop上,就很安全。 RunLoop始终与一个线程关联,因此将在该线程上执行块。因此,它们永远不会在同一时间开火。
但是,如果将它们安排在两个不同的RunLoop实例上,情况将会有所不同。
当您说仅将一个计时器添加到RunLoop时,我不确定您的意思。如果您不将计时器添加到RunLoop,则它将完全不触发。

关于ios - 确保两个计时器的执行逻辑不会同时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62442532/

相关文章:

ios - 无法访问 PFRelation 的属性

ios - 不应该画画的时候..?

swift - UIImage 调整大小扩展

mysql - 动态 MySql 查询每天返回 X 次结果

c++ - Boost asio::deadline_timer 在超时前重置

ios - AWS SNS 异常错误

ios - 如何在整个应用程序的生命周期中只运行一次数据?

ios - 将文本字段内容发布到 Firebase 数据库

ios - 如何规范化 iOS 中的视差数据?

javascript - jQuery/Javascript - "is not a function error"但函数已定义