開發中,常常會用到定時執行網絡請求、倒計時、計時器等功能,本篇文章介紹在iOS開發中,Swift怎樣使用GCD實現這些功能。git
下面的代碼將會在5秒後執行,且只執行一次。github
let time: NSTimeInterval = 5.0 let delay = dispatch_time(DISPATCH_TIME_NOW, Int64(time * Double(NSEC_PER_SEC))) dispatch_after(delay, dispatch_get_main_queue()) { self.getTaskList(false) }
下面的代碼是一個60秒倒計時的例子。網絡
var _timeout: Int = 60 let _queue: dispatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) let _timer: dispatch_source_t = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, _queue) // 每秒執行 dispatch_source_set_timer(_timer, dispatch_walltime(nil, 0), 1 * NSEC_PER_SEC, 0) dispatch_source_set_event_handler(_timer) { () -> Void in if _timeout <= 0 { // 倒計時結束 dispatch_source_cancel(_timer) dispatch_async(dispatch_get_main_queue(), { () -> Void in // 如需更新UI 代碼請寫在這裏 }) } else { print(_timeout) _timeout-- dispatch_async(dispatch_get_main_queue(), { () -> Void in // 如需更新UI 代碼請寫在這裏 }) } } dispatch_resume(_timer)
本文首發於馬燕龍我的博客,歡迎分享,轉載請標明出處。
馬燕龍我的博客:http://www.mayanlong.com
馬燕龍我的微博:http://weibo.com/imayanlong
馬燕龍Github主頁:https://github.com/yanlongmaasync