设置间隔时未触发排队



此代码不打印任何东西:

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:,它将按预期打印一次。为什么这样?

没有interval的变化使用DispatchQueue.main.asyncAfter并在执行操作之前检查处置。因此,除非您在返回的Disposable上明确调用dispose,否则该操作将进行。

但是interval的变化使用DispatchSource.makeTimerSource,然后在结果AnyDisposable操作中捕获返回的DispatchSourceTimer。由于DispatchSourceTimer在发布时会取消自身,因此您必须存储返回的Disposable否则deinits并取消计时器。

我不知道这是故意的行为还是错误。一方面,这种类似命名的方法在这方面的作用有所不同,这有点令人困惑。但另一方面,如果您忘记处理Disposable,则在间隔上重复的一个更容易泄漏,因此也许是有道理的。

更新:

这是一个错误,已固定在3.1.0中。

相关内容

  • 没有找到相关文章

最新更新