我应该使用未命名的Timer或DispatchasyncAfter来延迟一次吗?

时间:2017-08-12 17:32:59

标签: 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秒的延迟,我应该使用哪种方式?

1 个答案:

答案 0 :(得分:4)

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

虽然在你的情况下重复是错误的,但不会影响灵活性。