日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS GCD中级篇 - dispatch_group的理解及使用

發布時間:2025/5/22 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS GCD中级篇 - dispatch_group的理解及使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇GCD基礎篇,以及同步、異步,并發、并行幾個概率的理解

?

關于dispatch_group的概念以及幾種場景下的使用

1、關于dispatch_group

把一組任務提交到隊列中,這些隊列可以不相關,然后監聽這組任務完成的事件。

最常見的幾個方法:

1、dispatch_group_create創建一個調度任務組 2、dispatch_group_async 把一個任務異步提交到任務組里 3、dispatch_group_enter/dispatch_group_leave 這種方式用在不使用dispatch_group_async來提交任務,且必須配合使用 4、dispatch_group_notify 用來監聽任務組事件的執行完畢 5、dispatch_group_wait 設置等待時間,在等待時間結束后,如果還沒有執行完任務組,則返回。返回0代表執行成功,非0則執行失敗

2、實際使用場景  

場景1:

現在有4個任務,任務1、任務2、任務3、任務4. 任務3必須在任務2之后,任務4必須在前3個任務都執行完成后,才能執行,并且需要在主線程更新UI。

思路分析:

任務3必須在任務2之后,所以這兩個必須串行執行,同時,任務2和3整體可以和任務1并行執行,最后,任務4只能等待前3個任務全部執行完成,才能執行。這里就可以用group快速實現場景需求。

代碼實現:  

-(void)disGroup{dispatch_queue_t globalQuene = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_queue_t selfQuene = dispatch_queue_create("myQuene", 0);dispatch_group_t group = dispatch_group_create();dispatch_group_async(group, globalQuene, ^{NSLog(@"run task 1");});dispatch_group_async(group, selfQuene, ^{NSLog(@"run task 2");});dispatch_group_async(group, selfQuene, ^{NSLog(@"run task 3");});dispatch_group_notify(group, dispatch_get_main_queue(), ^{NSLog(@"run task 4");}); }

執行結果如下:(結果1和結果2是一樣的,只是1和2的順序區別)

結果1

結果2

總結: 1和(2、3)是并行執行關系,2、3是串行執行關系,且3肯定在2之后,而4在(1、2、3)全部完成之后才會執行。

 

2、dispatch_group_enter(group)、dispatch_group_leave(group) 何時使用

理論上講,這兩個方法其實就是:手動管理group關聯的block的運行狀態(或計數),并且使用時必須保證進入和退出group次數匹配。

所以:A和B兩種使用方式可以講是等價的

A) dispatch_group_async(group, queue, ^{ // 。。。 }); B) dispatch_group_enter(group); dispatch_async(queue, ^{//。。。dispatch_group_leave(group); });

所以,這種用法和直接使用dispatch_group_notify一定程度上是等價的,大家可以自己選擇使用。

 

場景2:

有3個異步請求任務,任務1、2、3,在3個任務全部完成之后,需要執行任務4,用以顯示界面數據。

用 dispatch_group_enter、?dispatch_group_leave 實現:

-(void)disGroupEnterAndLeave{dispatch_queue_t globalQuene = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_group_t group = dispatch_group_create();//任務1dispatch_group_enter(group);dispatch_async(globalQuene, ^{NSLog(@"run task 1");sleep(1);dispatch_group_leave(group);});//任務2dispatch_group_enter(group);dispatch_async(globalQuene, ^{NSLog(@"run task 2");sleep(2);dispatch_group_leave(group);});//任務3dispatch_group_enter(group);dispatch_async(globalQuene, ^{NSLog(@"run task 3");sleep(3);dispatch_group_leave(group);});//一直等待完成dispatch_group_wait(group, DISPATCH_TIME_FOREVER);//任務3dispatch_group_notify(group, dispatch_get_main_queue(), ^{NSLog(@"run task 4");});}

執行結果:

3個任務是并行執行,且一共花費3s執行,然后才執行任務4。

當然,如果這樣想串行執行3個任務,只需要把?全局隊列 換成?自定義隊列?即可。

  

 

轉載于:https://www.cnblogs.com/yajunLi/p/6273697.html

總結

以上是生活随笔為你收集整理的iOS GCD中级篇 - dispatch_group的理解及使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧洲色网站| 欧美成人专区 | 日韩毛片视频 | 久一国产| 欧美少妇喷水 | 一区二区国产欧美 | 香港台湾日本三级大全 | 日韩久久成人 | 国产精品21p| 中国超碰 | 国产又粗又猛又黄又爽视频 | 日韩成人在线一区 | 粉嫩在线 | 激情综| 亚洲精品成人无码毛片 | 69成人网| 香蕉视频官方网站 | 鬼眼| 性综合网| 国产一区二区三区四区五区六区 | 羞羞草影院 | 欧美刺激性大交 | 午夜视频污 | 激情婷婷综合网 | 三级电影网址 | 私人网站| 成人av网页 | 色呦呦网站在线观看 | 国产精品揄拍一区二区 | 狂野欧美性猛交blacked | 美女隐私黄www网站动漫 | 老头老太做爰xxx视频 | 911精品 | 亚洲熟妇av乱码在线观看 | 嫩模被强到高潮呻吟不断 | 天天想你在线观看完整版电影免费 | 秋霞二区 | 日韩黄色网页 | 久久久www成人免费毛片 | 小优视频污 | 国产一区二区免费 | 国产aⅴ一区二区三区 | 亚洲伊人成人网 | 五月99久久婷婷国产综合亚洲 | 国产一区二区在线视频观看 | 手机在线观看日韩av | 国产欧美一区二区三区精品酒店 | 国产99免费 | 麻豆一区二区 | 亚洲一区 | 国产在线成人 | 在线观看一区 | 天天艹夜夜艹 | 欧美福利一区二区 | 国产极品粉嫩 | 狠狠躁夜夜躁人爽 | 久久国产柳州莫菁门 | 亚洲天堂第一 | 久久一区二区三区视频 | 日韩Av无码精品 | 国产一级在线 | 一区二区三区不卡视频在线观看 | 日韩欧美中文字幕一区二区 | 色在线影院 | 亚洲综合在线第一页 | 婷婷.com | 激情久| 成人免费va视频 | 男人都懂的网址 | 天天爽天天插 | 91中文在线观看 | 亚洲色图p| 国产久草视频 | 久久色婷婷 | 五月婷在线观看 | 精品在线视频免费观看 | 日韩黄色免费看 | 密乳av| 我们2018在线观看免费版高清 | 色综合久久88色综合天天6 | 日韩美女毛片 | h片在线观看 | 亚洲尤物视频 | 日韩精品亚洲精品 | av在线播放网 | 亚洲综合在线第一页 | aaaa黄色 | www视频在线观看网站 | 色亚洲欧美 | 日韩三级精品 | 看全色黄大色黄大片大学生 | 亚洲一区中文字幕 | 2019中文字幕在线视频 | 国产日韩视频 | 人善交videos欧美3d动漫 | 91视频在线观看 | 国产99免费视频 | 久久久久久久久久福利 | 双性懵懂美人被强制调教 |