ios多線程操作—— GCD調度組的簡單使用

有這么一個需要,分別執(zhí)行2個耗時的異步操作,等2個異步操作都執(zhí)行完畢后在回到主線程執(zhí)行操作。如果想要快速高效地實現(xiàn)這個需求浸间,可以考慮使用調度組。

調度組的創(chuàng)建代碼如下:

dispatch_group_t group = dispatch_group_create();

往調度組里面添加任務的函數(shù)如下:

dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, ^(void)block)

第一個參數(shù)group是一個調度組吟榴,queue是一個異步隊列魁蒜,這里如果使用同步隊列意義就不大了,不過還是能達到效果吩翻,第三個參數(shù)是一個執(zhí)行代碼塊兜看,任務都添加到該代碼塊里面。

往調度組里面添加任務并獲得通知的代碼如下:

//? 群組-統(tǒng)一監(jiān)控一組任務

dispatch_group_t group = dispatch_group_create();

dispatch_queue_t q = dispatch_get_global_queue(0, 0);

// 添加任務

// group 負責監(jiān)控任務狭瞎,queue 負責調度任務

dispatch_group_async(group, q, ^{

[NSThread sleepForTimeInterval:1.0];

NSLog(@"任務1 %@", [NSThread currentThread]);

});

dispatch_group_async(group, q, ^{

NSLog(@"任務2 %@", [NSThread currentThread]);

});

dispatch_group_async(group, q, ^{

NSLog(@"任務3 %@", [NSThread currentThread]);

});

// 監(jiān)聽所有任務完成 - 等到 group 中的所有任務執(zhí)行完畢后铣减,"由隊列調度 block 中的任務異步執(zhí)行"

dispatch_group_notify(group, dispatch_get_main_queue(), ^{

// 修改為主隊列,后臺批量下載脚作,結束后葫哗,主線程統(tǒng)一更新UI

NSLog(@"OK %@", [NSThread currentThread]);

});

NSLog(@"come here");

代碼的執(zhí)行結果如下:

其中任務的下載順序以及"come here”出現(xiàn)的地方不確定,但主線程的更新操作總會在最后才執(zhí)行球涛!

GCD調度組中還有一個添加任務的函數(shù):

dispatch_group_enter(dispatch_group_t group)

dispatch_group_leave(dispatch_group_t group)

這兩個函數(shù)要配對出現(xiàn)

例如:

// 群組-統(tǒng)一監(jiān)控一組任務

dispatch_group_t group = dispatch_group_create();

dispatch_queue_t q = dispatch_get_global_queue(0, 0);

// 1> 入組 -> 之后的 block 會被 group 監(jiān)聽

// dispatch_group_enter 一定和 dispatch_group_leave 要配對出現(xiàn)

dispatch_group_enter(group);

dispatch_async(q, ^{

NSLog(@"task1 %@", [NSThread currentThread]);

// block 的末尾劣针,所有任務執(zhí)行完畢后,添加一個出組

dispatch_group_leave(group);

});

//? 再次入組

dispatch_group_enter(group);

dispatch_async(q, ^{

[NSThread sleepForTimeInterval:1.0];

NSLog(@"task2 %@", [NSThread currentThread]);

// block 的末尾亿扁,所有任務執(zhí)行完畢后捺典,添加一個出組

dispatch_group_leave(group);

});

// 群組結束

dispatch_group_notify(group, dispatch_get_main_queue(), ^{

NSLog(@"OVER");

});

NSLog(@"come here");

代碼執(zhí)行的效果與剛才那種方式相同!

GCD中還有一個函數(shù)

dispatch_group_wait(dispatch_group_t group, dispatch_time_t timeout)

該函數(shù)是個阻塞式的等待从祝,當我們將第二個參數(shù)設置為DISPATCH_TIME_FOREVER時襟己,群組任務不執(zhí)行完,后續(xù)代碼就會無法執(zhí)行牍陌,也就是說只要任務不執(zhí)行完come here就不會打印擎浴。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市毒涧,隨后出現(xiàn)的幾起案子贮预,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仿吞,死亡現(xiàn)場離奇詭異滑频,居然都是意外死亡,警方通過查閱死者的電腦和手機唤冈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門峡迷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人你虹,你說我怎么就攤上這事绘搞。” “怎么了售葡?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵看杭,是天一觀的道長忠藤。 經(jīng)常有香客問我挟伙,道長,這世上最難降的妖魔是什么模孩? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任尖阔,我火速辦了婚禮,結果婚禮上榨咐,老公的妹妹穿的比我還像新娘介却。我一直安慰自己,他們只是感情好块茁,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布齿坷。 她就那樣靜靜地躺著,像睡著了一般数焊。 火紅的嫁衣襯著肌膚如雪永淌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天佩耳,我揣著相機與錄音遂蛀,去河邊找鬼。 笑死干厚,一個胖子當著我的面吹牛李滴,可吹牛的內容都是我干的。 我是一名探鬼主播蛮瞄,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼所坯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了挂捅?” 一聲冷哼從身側響起包竹,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后周瞎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苗缩,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年声诸,在試婚紗的時候發(fā)現(xiàn)自己被綠了酱讶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡彼乌,死狀恐怖泻肯,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情慰照,我是刑警寧澤灶挟,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站毒租,受9級特大地震影響稚铣,放射性物質發(fā)生泄漏。R本人自食惡果不足惜墅垮,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一惕医、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧算色,春花似錦抬伺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至若河,卻和暖如春能岩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背牡肉。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工捧灰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人统锤。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓毛俏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饲窿。 傳聞我的和親對象是個殘疾皇子煌寇,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內容

  • NSThread 第一種:通過NSThread的對象方法 NSThread *thread = [[NSThrea...
    攻城獅GG閱讀 801評論 0 3
  • 一、前言 上一篇文章iOS多線程淺匯-原理篇中整理了一些有關多線程的基本概念逾雄。本篇博文介紹的是iOS中常用的幾個多...
    nuclear閱讀 2,050評論 6 18
  • 一阀溶、前言 本篇博文介紹的是iOS中常用的幾個多線程技術: NSThread GCD NSOperation 由于a...
    和玨貓閱讀 577評論 0 1
  • 版權聲明:本文原創(chuàng)腻脏,首發(fā)賬號:長江老師 ,如需轉載歡迎聯(lián)系作者授權银锻。
    長江老師閱讀 2,492評論 3 97
  • 人往往想得多永品,想得越多,你就猶豫越多击纬。每個人都有選擇人生道路的機會鼎姐,當你踏上這條路,不管你選擇是否正確更振,只要有心...
    沒影的脾氣閱讀 176評論 0 1