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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

队列 和 线程 之GCD dispatch

發(fā)布時間:2025/3/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 队列 和 线程 之GCD dispatch 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.dispatch_queue_create? 創(chuàng)建隊列開啟異步線程(1,4,2,3)

  // 創(chuàng)建一個隊列dispatch_queue_t queue = dispatch_queue_create("my.test.queue", DISPATCH_QUEUE_CONCURRENT);NSLog(@"1111");// 開啟一個異步線程dispatch_async(queue, ^{NSLog(@"2222");// 線程等待10秒[NSThread sleepForTimeInterval:5];NSLog(@"3333");});NSLog(@"4444");

2.創(chuàng)建隊列開啟同步線程(1,2,3,4)

// 創(chuàng)建一個隊列dispatch_queue_t queue = dispatch_queue_create("my.test.queue", DISPATCH_QUEUE_CONCURRENT);NSLog(@"1111");// 開啟一個同步線程dispatch_sync(queue, ^{NSLog(@"2222");// 線程等待10秒[NSThread sleepForTimeInterval:5];NSLog(@"3333");});NSLog(@"4444");

3.dispatch_get_global_queue 獲取全局隊列開啟異步線程(1,4,2,3)

NSLog(@"1111");// 獲取全局隊列dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);// 開啟一個異步線程dispatch_async(queue, ^{NSLog(@"2222222");[NSThread sleepForTimeInterval:5];NSLog(@"333");});NSLog(@"4444");

4.獲取全局隊列開啟同步線程 (1,2,3,4)

NSLog(@"1111");// 獲取全局隊列dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);// 開啟一個同步線程dispatch_sync(queue, ^{NSLog(@"2222222");[NSThread sleepForTimeInterval:5];NSLog(@"333");});NSLog(@"4444");

5.dispatch_get_main_queue() ?獲取主線程隊列,再開啟異步線程(1,4,2,3)

NSLog(@"1111");// 獲取主線程隊列dispatch_queue_t queue = dispatch_get_main_queue();dispatch_async(queue, ^{NSLog(@"2222");[NSThread sleepForTimeInterval:5];NSLog(@"33333");});NSLog(@"4444");

6.獲取主線程隊列,再開啟同步線程 (1) 。 線程會因為死鎖,而永遠卡死

NSLog(@"1111");// 獲取主線程隊列dispatch_queue_t queue = dispatch_get_main_queue();dispatch_sync(queue, ^{NSLog(@"2222");[NSThread sleepForTimeInterval:5];NSLog(@"33333");});NSLog(@"4444");

?

總結:獲取全局隊列的名字是默認的,創(chuàng)建隊列時可以自己命名隊列的名字,其他用法都是一樣的。個人認為同步線程意義不大

7.dispatch_get_main_queue()? 回到主線程
??? 耗時操作需需要放在異步線程里,UI界面更新必須放在主界面里
??? [2376:131819] 1111
??? [2376:131819] 4444
??? [2376:131860] 2222
??? [2376:131860] 3333
??? [2376:131819] 5555
??? 從打印結果來看(1,4,5是在主線程里面,2,3是在異步線程里面)

NSLog(@"1111");// 獲取主線程隊列dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_async(queue, ^{NSLog(@"2222");[NSThread sleepForTimeInterval:5];// 回到主線程dispatch_async(dispatch_get_main_queue(), ^{NSLog(@"5555");});NSLog(@"3333");});NSLog(@"4444");

8.dispatch_apply? 執(zhí)行某個片段N(6)次

?

dispatch_apply(6, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t index) {NSLog(@"1111");});

9.dispatch_barrier_async 是在前面的任務執(zhí)行結束后它才執(zhí)行,而且它后面的任務等它執(zhí)行完成之后才會執(zhí)行 (2,1,3,4)

dispatch_queue_t queue = dispatch_queue_create("gcdtest.rongfzh.yc", DISPATCH_QUEUE_CONCURRENT);dispatch_async(queue, ^{[NSThread sleepForTimeInterval:3];NSLog(@"111");});dispatch_async(queue, ^{[NSThread sleepForTimeInterval:2];NSLog(@"222");});dispatch_barrier_async(queue, ^{NSLog(@"333_barrier");[NSThread sleepForTimeInterval:4];});dispatch_async(queue, ^{[NSThread sleepForTimeInterval:1];NSLog(@"444");});

10.dispatch_group_async 可以實現監(jiān)聽幾組任務是否完成,完成后使用 dispatch_group_notify 執(zhí)行其他的操作 (1,2,3,4)

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);// 創(chuàng)建一組任務dispatch_group_t group = dispatch_group_create();dispatch_group_async(group, queue, ^{[NSThread sleepForTimeInterval:1];NSLog(@"111");});dispatch_group_async(group, queue, ^{[NSThread sleepForTimeInterval:2];NSLog(@"222");});dispatch_group_async(group, queue, ^{[NSThread sleepForTimeInterval:3];NSLog(@"333");});// 監(jiān)聽所有組的任務完成之后執(zhí)行,一般是回到主線程刷新UI界面dispatch_group_notify(group, dispatch_get_main_queue(), ^{NSLog(@"444");});

11.dispatch_once 對于某個任務執(zhí)行一次,且只執(zhí)行一次。 dispatch_once函數有兩個參數,第一個參數predicate用來保證執(zhí)行一次,第二個參數是要執(zhí)行一次的任務block。

static dispatch_once_t predicate; dispatch_once(&predicate, ^{// some one-time task });

?

暫時用到這么多,以后再用到會繼續(xù)補充,也歡迎大家指出遺漏!

轉載于:https://www.cnblogs.com/shen5214444887/p/4917343.html

總結

以上是生活随笔為你收集整理的队列 和 线程 之GCD dispatch的全部內容,希望文章能夠幫你解決所遇到的問題。

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