GCD的基本使用

1異步函數+并發隊列(會開多條線程,任務是并發執行的

?1、1創建并發隊列

dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_CONCURRENT);

1、2執行異步函數

dispatch_async(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

2異步函數+串行隊列(會開一條線程,任務是按順序執行的)

2、1創建串行隊列

dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_SERIAL);

2、2執行異步函數

dispatch_async(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

3、同步函數+并發隊列(不會開線程,任務按順序執行)

3、1創建并發隊列

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

3、2執行同步任務

dispatch_sync(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

4、異步函數+并發隊列(不會開線程,任務按順序執行)

4-1創建并發隊列

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

4-2執行異步任務

dispatch_async(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

5、同步函數+主隊列(不會開線線程,會死鎖)

5-1獲得主隊列

dispatch_queue_t queue =? dispatch_get_main_queue();

5-2執行同步函數

ispatch_sync(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

6、異步函數+主隊列(不會開線程,任務按順序執行)

6-1獲得主隊列

dispatch_queue_t queue =? dispatch_get_main_queue();

6-2執行異步函數

dispatch_async(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

7、同步函數+全局隊列(不會開線程,任務是按順序執行的)

7-1、獲取全局隊列

//獲得全局并發隊列,默認存在,特殊的并發隊列

//第一個參數:隊列的優先級 DISPATCH_QUEUE_PRIORITY_DEFAULT == 0

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

7-2、執行同步任務

dispatch_sync(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

8、異步函數+全局隊列(會開線程,任務是并發執行的)

8-1、獲得全局隊列

//獲得全局并發隊列,默認存在,特殊的并發隊列

//第一個參數:隊列的優先級 DISPATCH_QUEUE_PRIORITY_DEFAULT == 0

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

8-2、執行異步函數

dispatch_async(queue, ^{

NSLog(@"download 1---%@",[NSThread currentThread]);

});

總結:會不會開線程是根據執行的是什么函數,如果是異步函數會開線程(主隊列除外)如果是同步函數不會開線程

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容