iOS深入理解GCD 第二篇(Dispatch Group)

Dispatch Group

在追加到Dispatch Queue中的多個任務處理完畢之后想執(zhí)行結束處理,這種需求會經常出現(xiàn)。如果只是使用一個Serial Dispatch Queue(串行隊列)時,只要將想執(zhí)行的處理全部追加到該串行隊列中并在最后追加結束處理即可,但是在使用Concurrent Queue 時,可能會同時使用多個Dispatch Queue時,源代碼就會變得很復雜。

在這種情況下,就可以使用Dispatch Group。

- (void)GcdGroupexampleFirst {
    dispatch_group_t group = dispatch_group_create();
    dispatch_queue_t queue = dispatch_queue_create("com.gcd-jianshu.www", DISPATCH_QUEUE_CONCURRENT);
    
    dispatch_group_async(group, queue, ^{
        NSLog(@"group中的第一個--- %@",[NSThread currentThread]);
    });
    
    dispatch_group_async(group, queue, ^{
        NSLog(@"group中的第二個--- %@",[NSThread currentThread]);
    });
    
    dispatch_group_async(group, queue, ^{
        NSLog(@"group中的第三個--- %@",[NSThread currentThread]);
    });
    
    dispatch_group_notify(group, queue, ^{
        NSLog(@"done");
    });
}

控制臺打印結果:

2017-09-08 15:24:48.877 GcdInsightTest[70557:3031178] group中的第二個--- <NSThread: 0x600000077dc0>{number = 4, name = (null)}
2017-09-08 15:24:48.877 GcdInsightTest[70557:3031177] group中的第一個--- <NSThread: 0x608000073500>{number = 3, name = (null)}
2017-09-08 15:24:48.877 GcdInsightTest[70557:3031180] group中的第三個--- <NSThread: 0x608000265540>{number = 5, name = (null)}
2017-09-08 15:24:48.877 GcdInsightTest[70557:3031180] done

```Dispatch Group
由打印結果可以看出,多個線程并行執(zhí)行,所以追加處理的執(zhí)行順序不確定。執(zhí)行順序因此會發(fā)生變化,但此執(zhí)行結果的done一定是最后輸出的。這樣一來我們就實現(xiàn)了文章開頭的需求。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 簡介 GCD(Grand Central Dispatch)是在macOS10.6提出來的,后來在iOS4.0被引...
    sunmumu1222閱讀 892評論 0 2
  • 我們知道在iOS開發(fā)中,一共有四種多線程技術:pthread,NSThread,GCD,NSOperation: ...
    請叫我周小帥閱讀 1,503評論 0 1
  • 背景 擔心了兩周的我終于輪到去醫(yī)院做胃鏡檢查了!去的時候我都想好了最壞的可能(胃癌),之前在網(wǎng)上查的癥狀都很相似。...
    Dely閱讀 9,266評論 21 42
  • 一、GCD的API 1. Dispatch queue 在執(zhí)行處理時存在兩種Dispatch queue: 等待現(xiàn)...
    doudo閱讀 508評論 0 0
  • 電梯測試,測試的是一個人遇事反應能力,也是對你自己工作的了解能力的反應,電梯的30秒,測試你能不能把握機會,用最精...
    高密中百閱讀 125評論 0 0