Swift 4.0 GCD 中的 dispatch after 淺談

相信大家在 oc 中都會(huì)用到過(guò) dispatch_after() { code... } 函數(shù),是用來(lái)延遲執(zhí)行一段代碼。

GCD 在 Swift 中又是怎么用的呢?

早在 Swift 2.3 時(shí),曾仿 oc 的 dispatch_after 函數(shù)寫(xiě)過(guò)一個(gè) Swift 版 dispatch_after 代碼塊,可是由于項(xiàng)目原因一年多幾乎沒(méi)碰Swift,直到近來(lái)在用到時(shí)發(fā)現(xiàn)出錯(cuò)了,看 API 才知道已經(jīng)有所更改。在此與大家分享。

01:oc 版 dispatch_after


dispatch_after.png

【注意這里 “PER” 是 “每” 的意思。比如 “NSEC_PER_SEC” 通俗來(lái)說(shuō)就是 “每秒是多少納秒”,相當(dāng)于將秒轉(zhuǎn)換為納秒的常數(shù)。 舉例說(shuō)明下:要將5秒轉(zhuǎn)為納秒,那就是 5 * NSEC_PER_SEC ?!?/p>

02:再來(lái)看下 Swift 2.3 版本的


image.png

基本寫(xiě)法跟 oc 一致,但是在 Swift 4.0 之后已經(jīng)有提示讓換成 DispatchQueue...... 的形式了。

03:swift 4.0 版本


dispatch_after Swift.png

對(duì)比3個(gè)版本可以看出,內(nèi)容沒(méi)變但是格式變化了。
其實(shí)在 Swift 3.0 之后的 GCD 就變成了 DispatchQueue.main / DispatchQueue.global 的形式,
這種形式更容易理解,那就是:
【 隊(duì)列 (調(diào)度) 任務(wù) (執(zhí)行)代碼】
【 DispatchQueue . main . asyncAfter (params) { code...... } 】

這樣子的代碼是不是跟隊(duì)列調(diào)度任務(wù)的原理一致呢?

此處的 dispatch_after 問(wèn)題解決了,同時(shí)也引出了 Swift 使用GCD 的基本格式。

值得注意的是 GCD 的嵌套使用,還會(huì)涉及到 尾隨閉包 的知識(shí)點(diǎn)等等,在后面的文章中會(huì)單獨(dú)介紹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 盡管 Grand Central Dispatch (GCD)已經(jīng)存在一段時(shí)間了,但并非每個(gè)人都知道怎么使用它。這...
    coderFamer閱讀 7,566評(píng)論 1 16
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,421評(píng)論 4 61
  • 安裝 使用Homebrew 安裝MySQL 在使用MySQL 前,需要進(jìn)行一些配置。 使用 啟動(dòng)MySQL 服務(wù) ...
    eriolchan閱讀 221評(píng)論 0 0
  • 沒(méi)有時(shí)間寫(xiě)東西 都在刷數(shù)理化 有時(shí)考的很差 有時(shí)考得很好 好多東西都是一念之間 或許對(duì)的 或許錯(cuò)的。 所以做錯(cuò)了很...
    阿卷卷卷閱讀 234評(píng)論 0 1
  • 今天,真的很憤怒,就在幾小時(shí)前,很想大發(fā)雷霆。但是我還是壓住了火氣,不隨便發(fā)脾氣,是不是說(shuō)明好像成長(zhǎng)了一點(diǎn)呢?而...
    周小周007閱讀 508評(píng)論 3 1

友情鏈接更多精彩內(nèi)容