Ios 向主运行循环添加计时器是正确的解决方案吗?

Ios 向主运行循环添加计时器是正确的解决方案吗?,ios,swift,timer,Ios,Swift,Timer,我有一个计时器,我想在给定的时间间隔内不断重复,但是我似乎能让计时器持续的唯一方法是将其添加到RunLoop.main,如下所示: let timer = Timer(timeInterval: timeInterval, repeats: true) { (timer) in blockToFire() } RunLoop.main.add(timer, forMode: .commonModes) 我理解使用.commonModes应该可以防止用户与UI交互时计时器丢失提示,但是计

我有一个计时器,我想在给定的时间间隔内不断重复,但是我似乎能让计时器持续的唯一方法是将其添加到RunLoop.main,如下所示:

let timer = Timer(timeInterval: timeInterval, repeats: true) { (timer) in
    blockToFire()
}
RunLoop.main.add(timer, forMode: .commonModes)

我理解使用.commonModes应该可以防止用户与UI交互时计时器丢失提示,但是计时器是否会导致添加到主运行循环中的问题?用户界面会变慢吗?

您发布的代码很好。运行循环与特定线程相关联。计时器通常在主线程/主运行循环上运行。因此,如果代码执行时间过长,它们将在主线程中导致“打嗝”。不要调用代码块/选择器,因为从主线程运行代码需要很长时间/将它们附加到主运行循环,否则会导致UI速度减慢

您还可以在后台线程上创建和运行计时器。我通常使用
scheduledTimer()
方法之一,该方法创建计时器并将其添加到“当前运行循环”(即当前线程的运行循环)

如果要在其他线程上运行计时器,可以从后台线程调用
scheduledTimer()
方法之一。但是,请注意,您不应该从后台线程调用UIKit