Swift GCD使用簡(jiǎn)單場(chǎng)景記錄 兼容Swift3.0

  1. 延遲執(zhí)行:
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()+3.0, execute: {
            [unowned self] () -> Void in
            //延遲操作
        })

PS. DispatchTime對(duì)象用now()獲取當(dāng)前時(shí)間,加上秒數(shù)即可

  1. 全局隊(duì)列執(zhí)行耗時(shí)操作后切換到主線程刷新UI
        DispatchQueue.global().async {
            // 耗時(shí)操作
            DispatchQueue.main.async {
                // 主線程刷新UI
            }
        }
  1. 同步執(zhí)行操作
        DispatchQueue.global().sync {
            // 同步執(zhí)行
        }
  1. 創(chuàng)建隊(duì)列
    DispatchQueue的默認(rèn)初始化方法創(chuàng)建的是同步隊(duì)列,如果要?jiǎng)?chuàng)建并發(fā)的隊(duì)列,在attributes中聲明.concurrent蓖康。
        // 同步隊(duì)列
        let serialQueue = DispatchQueue(label: "name")
        
        // 并發(fā)隊(duì)列
        let concurrentQueue = DispatchQueue(label: "name", attributes: .concurrent)
  1. 執(zhí)行多個(gè)任務(wù)后再做某種操作
    使用DispatchGroup,所有操作都完成后執(zhí)行notify劫狠。
        let group = DispatchGroup()
        
        let queue1 = DispatchQueue(label: "queue1")
        queue1.async(group: group) {
            // 執(zhí)行任務(wù)1
        }
        let queue2 = DispatchQueue(label: "queue2")
        queue1.async(group: group) {
            // 執(zhí)行任務(wù)2
        }
        
        group.notify(queue: DispatchQueue.main) { 
            // 執(zhí)行完成
        }

如果要在某一任務(wù)或某幾個(gè)任務(wù)后后執(zhí)行其他任務(wù)夸研,可在任務(wù)間加上等待:

        //等待組內(nèi)任務(wù)全部完成
        group.wait(timeout: DispatchTime.distantFuture)
  1. DispatchWorkItem的使用
    DispatchWorkItem可理解為任務(wù)條目,可初始化傳入優(yōu)先級(jí)等參數(shù)媳拴,因其有默認(rèn)值黄橘,也可只傳入一個(gè)閉包。同樣禀挫,它也有wait方法旬陡,使用和上面差不多。
        let queue = DispatchQueue(label: "queue", attributes: .concurrent)
        let workItem = DispatchWorkItem {
            // 任務(wù)
        }
        queue.async(execute: workItem)
        print("before waiting")
        workItem.wait()
        print("after waiting")
  1. barrier柵欄
    barrier的加入會(huì)等到在它加入隊(duì)列之前的“任務(wù)”執(zhí)行完畢后语婴,才開(kāi)始執(zhí)行描孟。在它之后加入隊(duì)列的“任務(wù)”驶睦,則等到這個(gè)“任務(wù)”執(zhí)行完畢后才開(kāi)始執(zhí)行。這里的“任務(wù)”用DispatchWorkItem創(chuàng)建匿醒。
        let barrierWorkItem = DispatchWorkItem(flags: .barrier) {
            // 柵欄操作场航,比如之前有若干“讀”操作,這里有“寫(xiě)”操作
        }
        let queue = DispatchQueue(label: "queue", attributes: .concurrent)
        queue.async(execute: barrierWorkItem)
  1. 信號(hào)量
    為了線程安全的統(tǒng)計(jì)數(shù)量廉羔,會(huì)使用信號(hào)量作計(jì)數(shù)溉痢。初始化方法只有一個(gè),傳入一個(gè)Int類型的數(shù)憋他。
        let semaphore = DispatchSemaphore(value: 10)
        
        // 信號(hào)量減一
        semaphore.wait()
        
        // 信號(hào)量加一
        semaphore.signal()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末孩饼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子竹挡,更是在濱河造成了極大的恐慌镀娶,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揪罕,死亡現(xiàn)場(chǎng)離奇詭異梯码,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)好啰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)轩娶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人框往,你說(shuō)我怎么就攤上這事鳄抒。” “怎么了搅窿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵嘁酿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我男应,道長(zhǎng)闹司,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任沐飘,我火速辦了婚禮游桩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耐朴。我一直安慰自己借卧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布筛峭。 她就那樣靜靜地躺著铐刘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪影晓。 梳的紋絲不亂的頭發(fā)上镰吵,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天檩禾,我揣著相機(jī)與錄音,去河邊找鬼疤祭。 笑死盼产,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的勺馆。 我是一名探鬼主播戏售,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼草穆!你這毒婦竟也來(lái)了灌灾?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤悲柱,失蹤者是張志新(化名)和其女友劉穎紧卒,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體诗祸,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年轴总,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了直颅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怀樟,死狀恐怖功偿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情往堡,我是刑警寧澤械荷,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站虑灰,受9級(jí)特大地震影響吨瞎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜穆咐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一颤诀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧对湃,春花似錦崖叫、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至拆讯,卻和暖如春脂男,著一層夾襖步出監(jiān)牢的瞬間养叛,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工疆液, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留一铅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓堕油,卻偏偏與公主長(zhǎng)得像潘飘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掉缺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • GCD思維導(dǎo)圖 GCD(Grand Central Dispatch)是蘋(píng)果公司實(shí)現(xiàn)...
    brycegao閱讀 1,884評(píng)論 0 8
  • 一卜录、前言 上一篇文章iOS多線程淺匯-原理篇中整理了一些有關(guān)多線程的基本概念。本篇博文介紹的是iOS中常用的幾個(gè)多...
    nuclear閱讀 2,050評(píng)論 6 18
  • 一眶明、前言 本篇博文介紹的是iOS中常用的幾個(gè)多線程技術(shù): NSThread GCD NSOperation 由于a...
    和玨貓閱讀 577評(píng)論 0 1
  • GCD并發(fā)async & sync 很多程序都有一個(gè)主線程,對(duì)于iOS/MacOS開(kāi)發(fā)來(lái)說(shuō)艰毒,這個(gè)線程就是UI線程,...
    大軍的閱讀 1,086評(píng)論 0 0
  • 報(bào)名了三節(jié)課互聯(lián)網(wǎng)運(yùn)營(yíng)P1的課程搜囱。一開(kāi)始的作業(yè)就把我嚇了一跳丑瞧。作為一個(gè)出了社會(huì)就再也沒(méi)有寫(xiě)過(guò)一份簡(jiǎn)歷的80后,看到...
    楊紅雅閱讀 218評(píng)論 3 2