我有两个计时器,它们以不同的时间间隔运行,其中一个添加到运行循环中。
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
,则它将完全不触发。