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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GCD学习之dispatch_barrier_async

發(fā)布時間:2025/4/9 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GCD学习之dispatch_barrier_async 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? iOS常見的多線程開發(fā)方式有NSThread、NSOPeration和GCD,抽象程度依次提高,GCD是最抽象的,使用起來最簡單,但相對來說功能有限,比如不能cancel任務(wù),這也算是一點(diǎn)遺憾吧。

? ? 今天主要記錄下學(xué)習(xí)dispatch_barrier_async中遇到的問題(其實(shí)是自己沒仔細(xì)看Apple文檔),dispatch_barrier_async是在執(zhí)行完前面的任務(wù)后它才執(zhí)行,而且它后面的任務(wù)等它執(zhí)行完成之后才會執(zhí)行(先后順序是按照添加到queue的次序),但該API適用的場景是dispatch queue必須是用DISPATCH_QUEUE_CONCURRENT屬性創(chuàng)建的queue,而不能是用系統(tǒng)定義好的dispatch_get_global_queue,下面是測試代碼:

1、當(dāng)dispatch queue是dispatch_get_global_queue時,dispatch_barrier_async失效:

1 - (void)viewDidLoad { 2 [super viewDidLoad]; 3 // Do any additional setup after loading the view, typically from a nib. 4 NSLog(@"main thread:%p",[NSThread currentThread]); 5 [self testBarrierBlockWithGlobalQueue]; 6 } 7 - (void)testBarrierBlockWithGlobalQueue 8 { 9 NSLog(@"current iOS Version:%.1f",[[[UIDevice currentDevice] systemVersion] floatValue]); 10 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 11 dispatch_async(queue, ^{ 12 [NSThread sleepForTimeInterval:2]; 13 NSLog(@"Excute block 1:%p",[NSThread currentThread]); 14 }); 15 dispatch_async(queue, ^{ 16 [NSThread sleepForTimeInterval:3]; 17 NSLog(@"Excute block 2:%p",[NSThread currentThread]); 18 }); 19 dispatch_barrier_async(queue, ^{ 20 NSLog(@"Excute block 3:%p",[NSThread currentThread]); 21 [NSThread sleepForTimeInterval:4]; 22 }); 23 dispatch_async(queue, ^{ 24 NSLog(@"Excute block 4:%p",[NSThread currentThread]); 25 }); 26 } 27 打印結(jié)果: 28 2015-06-09 23:16:33.799 testGCD[46920:3369866] main thread:0x7f87f8c0af70 29 2015-06-09 23:16:33.800 testGCD[46920:3369866] current iOS Version:8.3 30 2015-06-09 23:16:33.800 testGCD[46920:3370037] Excute block 4:0x7f87f8e14a60 31 2015-06-09 23:16:33.800 testGCD[46920:3370029] Excute block 3:0x7f87f8f222d0 32 2015-06-09 23:16:35.802 testGCD[46920:3370027] Excute block 1:0x7f87f8f27a90 33 2015-06-09 23:16:36.804 testGCD[46920:3370026] Excute block 2:0x7f87f8c1e610

從打印結(jié)果可以看到不是預(yù)想的block3在block1、block2后面,最后再執(zhí)行block4,說明在global_queue下dispatch_barrier_async失效。

2、當(dāng)dispatch queue是用DISPATCH_QUEUE_CONCURRENT屬性創(chuàng)建的queue時,dispatch_barrier_async有效:

1 - (void)testBarrierBlockWithCreateQueue 2 { 3 NSLog(@"current iOS Version:%.1f",[[[UIDevice currentDevice] systemVersion] floatValue]); 4 dispatch_queue_t queue = dispatch_queue_create("com.testBarrierGCD", DISPATCH_QUEUE_CONCURRENT); 5 dispatch_async(queue, ^{ 6 [NSThread sleepForTimeInterval:2]; 7 NSLog(@"Excute block 1:%p",[NSThread currentThread]); 8 }); 9 dispatch_async(queue, ^{ 10 [NSThread sleepForTimeInterval:3]; 11 NSLog(@"Excute block 2:%p",[NSThread currentThread]); 12 }); 13 dispatch_barrier_async(queue, ^{ 14 NSLog(@"Excute block 3:%p",[NSThread currentThread]); 15 [NSThread sleepForTimeInterval:4]; 16 }); 17 dispatch_async(queue, ^{ 18 NSLog(@"Excute block 4:%p",[NSThread currentThread]); 19 }); 20 } 21 打印結(jié)果: 22 2015-06-09 23:21:55.671 testGCD[46963:3373180] main thread:0x7fa51a428130 23 2015-06-09 23:21:55.672 testGCD[46963:3373180] current iOS Version:8.3 24 2015-06-09 23:21:57.676 testGCD[46963:3373293] Excute block 1:0x7fa51a65a890 25 2015-06-09 23:21:58.673 testGCD[46963:3373294] Excute block 2:0x7fa51a71cf50 26 2015-06-09 23:21:58.674 testGCD[46963:3373294] Excute block 3:0x7fa51a71cf50 27 2015-06-09 23:22:02.676 testGCD[46963:3373294] Excute block 4:0x7fa51a71cf50

從打印結(jié)果可以看出block執(zhí)行順序是按照我們預(yù)期的順序在執(zhí)行,至此說明了dispatch_barrier_async適用的場景是dispatch queue必須是用DISPATCH_QUEUE_CONCURRENT屬性創(chuàng)建的queue(其實(shí)Apple文檔中有說明的,以后用新的API時一定得仔細(xì)閱讀文檔,避免多走彎路)~祝大家玩的愉快~

測試代碼已上傳至GitHub:https://github.com/iOSGeek0829/testGCDWithBarrierBlock

轉(zhuǎn)載于:https://www.cnblogs.com/NerdFooProgrammer/p/4564961.html

總結(jié)

以上是生活随笔為你收集整理的GCD学习之dispatch_barrier_async的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲男人第一网站 | 亚洲国产电影在线观看 | 日本肉体xxxⅹ裸体交 | 精品国产鲁一鲁一区二区三区 | 国产999久久久 | 91精品久久香蕉国产线看观看 | 黄网免费在线观看 | 自拍偷拍国内 | 素人一区 | 欧美日韩理论 | 摸大乳喷奶水www视频 | 免看一级片 | 久久精品视屏 | 国产精品一区免费 | 星空大象mv高清在线观看免费 | 国产av 一区二区三区 | 人妻久久一区二区三区 | 香蕉国产999 | 日韩成人在线免费视频 | 特级特黄刘亦菲aaa级 | 极品销魂美女一区二区三区 | 欧美自拍偷拍一区 | ,国产精品国产三级国产 | 精品一区二区三区中文字幕 | 欧美拍拍视频 | 欧美亚洲综合一区 | 爆操网站 | 强行糟蹋人妻hd中文字幕 | 91精品国产成人www | 欧美sm凌虐视频网站 | av永久网站 | 国产成人精品综合在线观看 | 人妻视频一区二区 | 在线成年人视频 | 久久久精品国产免费爽爽爽 | 欧美成人做爰猛烈床戏 | 大陆极品少妇内射aaaaa | 男人天堂网在线 | 亚洲老女人 | 少妇一级免费 | 中文字幕乱码在线人视频 | 一级淫片在线观看 | 日本天堂在线 | 性生生活性生交a级 | 日韩欧美视频免费在线观看 | 国产成人+综合亚洲+天堂 | 一区二区在线免费 | 欧美视频网址 | 国产调教一区 | 久久久国产精华液999999 | 欧美一区永久视频免费观看 | 成人春色影视 | 亚洲无吗一区二区三区 | 久热伊人| 欧美xxxxxxxxx | 九九热国产在线 | 免费看黄色漫画 | 激情www | 欧美激情亚洲色图 | 撸啊撸在线视频 | 中文字幕在线1 | 成人一级片在线观看 | av资源新版在线天堂 | xxxxxx日本| 日日干夜夜爱 | 日韩成年视频 | 久久久99精品 | 日韩逼| 狠狠操狠狠操 | 亚洲高清毛片 | 日韩三级免费看 | 成人欧美一区二区三区黑人孕妇 | 国产不卡视频 | 亚洲欧美国产一区二区三区 | 亚洲精品国 | 黄色片一区二区三区 | 妓院一钑片免看黄大片 | 国产又粗又猛又爽又黄无遮挡 | 91热久久| 天天射天天色天天干 | 1024金沙人妻一区二区三区 | 视频一区二区欧美 | 中文字幕一区二区三区乱码 | 色悠悠网 | 一区黄色| 岛国av电影在线观看 | 老妇裸体性激交老太视频 | 熟女少妇内射日韩亚洲 | 亚洲一区a | 免费在线观看中文字幕 | 国产黄色特级片 | 国产高清无密码一区二区三区 | 97精品人人a片免费看 | 在线成人毛片 | 色片免费观看 | 久在线播放 | 中文亚洲字幕 | 久久色在线观看 | 国产中出 |