设置间隔时 QueueScheduler 不触发

QueueScheduler not firing when interval is set

此代码不打印任何内容:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
 QueueScheduler.main.schedule(after: Date() + 1.seconds, 
                              interval: .seconds(1)){
                                print("test Output")}
 return true
}

但是如果我在没有 interval: 的情况下这样做,它会按预期打印一次。为什么这样?

The variation without interval is using DispatchQueue.main.asyncAfter 并在执行操作前检查处置情况。因此该操作将 运行 除非您在返回的 Disposable.

上显式调用 dispose

但是the variation with interval is using DispatchSource.makeTimerSource and then capturing the returned DispatchSourceTimer in the resulting AnyDisposable action。由于 DispatchSourceTimer 在释放时自行取消,您必须存储返回的 Disposable 否则它 deinits 并且计时器被取消。

我不知道这是故意行为还是错误。一方面,这种名称相似的方法在这方面的行为不同,这有点令人困惑。但另一方面,如果您忘记处理 Disposable 它 returns,那么按间隔重复的 更容易泄漏,所以也许它使感觉。

更新:

这是一个错误 fixed in 3.1.0