swift - 我应该使用未命名的 Timer 还是 Dispatch asyncAfter 来延迟 1 次?

标签 swift timer grand-central-dispatch

我可以通过两种方式延迟某些事情(也许还有更多方式):

   func delay(delay:Double, closure: @escaping ()->()) {
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: closure)
    }

   //way 1:
    delay(delay: 1.0, closure: {
    })

   //way 2:
    _ = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false){ _ in 
    }

这些方式有什么区别吗?方法 1 比方法 2 好吗?我只想加1秒的延迟,应该用什么方式?

最佳答案

DispatchQueue.main.asyncAfter 是一种 GCD 方法,因此性能更好。尽管 NSTimer 更加灵活,您可以在其中停止或暂停计时器,但我认为您不能取消 DispatchQueue.main.asyncAfter 或者至少您必须取消写一个包装器。

虽然在你的情况下 repeats 是错误的,但它不会影响灵 active 。

关于swift - 我应该使用未命名的 Timer 还是 Dispatch asyncAfter 来延迟 1 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45653076/

相关文章:

ios - 如何获取 UISearchController 搜索结果 TableView

ios - Xcode 10 代码完成占位符 — "T"是什么?

ios - SwiftUI ForEach View 第一次未更新

ios - NSURLSessionDataTask 和线程

iOS swift后台线程阻塞主线程

ios - 虽然项目正在保存在核心数据中,但在重新启动之前无法查看它们

android - 每 5 秒自动滑动标签项

linux - 在 linux 中对发送到 CPU 的两个信号使用react

mysql - Timekeeper MySQL-结构

ios - 为 GCD 操作设置超时