iOS開發(fā)多線程說明
GCD中有2個核心概念
(1)任務:執(zhí)行什么操作
(2)隊列:用來存放任務
GCD的使用就2個步驟
(1)定制任務
(2)確定想做的事情
將任務添加到隊列中,GCD會自動將隊列中的任務取出,放到對應的線程中執(zhí)行
提示:任務的取出遵循隊列的FIFO原則:先進先出,后進后出
二。 執(zhí)行任務
1. GCD中有2個用來執(zhí)行任務的函數(shù)
說明:把右邊的參數(shù)(任務)提交給左邊的參數(shù)(隊列)進行執(zhí)行。
(1)用同步的方式執(zhí)行任務 dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);
參數(shù)說明:
queue:隊列
block:任務
(2)用異步的方式執(zhí)行任務 dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
2. 同步和異步的區(qū)別
同步:在當前線程中執(zhí)行
異步:在另一條線程中執(zhí)行
三。 隊列
1. 隊列的類型
GCD的隊列可以分為2大類型
(1)并發(fā)隊列(Concurrent Dispatch Queue)
可以讓多個任務并發(fā)(同時)執(zhí)行(自動開啟多個線程同時執(zhí)行任務)并發(fā)功能只有在異步(dispatch_async)函數(shù)下才有效
(2)串行隊列(Serial Dispatch Queue)
讓任務一個接著一個地執(zhí)行(一個任務執(zhí)行完畢后,再執(zhí)行下一個任務)
2. 補充說明
有4個術語比較容易混淆:同步、異步、并發(fā)、串行
同步和異步?jīng)Q定了要不要開啟新的線程
同步:在當前線程中執(zhí)行任務,不具備開啟新線程的能力
異步:在新的線程中執(zhí)行任務,具備開啟新線程的能力
并發(fā)和串行決定了任務的執(zhí)行方式
并發(fā):多個任務并發(fā)(同時)執(zhí)行
串行:一個任務執(zhí)行完畢后,再執(zhí)行下一個任務
3. 串行隊列
GCD中獲得串行有2種途徑
(1)使用dispatch_queue_create函數(shù)創(chuàng)建串行隊列
dispatch_queue_t dispatch_queue_create(const char *label, dispatch_queue_attr_t attr); // 隊列名稱, 隊列屬性,一般用NULL即可
示例:
dispatch_queue_t queue = dispatch_queue_create(“wendingding”, NULL); // 創(chuàng)建
dispatch_release(queue); // 非ARC需要釋放手動創(chuàng)建的隊列
(2)使用主隊列(跟主線程相關聯(lián)的隊列)
主隊列是GCD自帶的一種特殊的串行隊列,放在主隊列中的任務,都會放到主線程中執(zhí)行
使用dispatch_get_main_queue()獲得主隊列
示例:
dispatch_queue_t queue = dispatch_get_main_queue();
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
下載地址
iOS開發(fā)多線程說明下載
相關電子資料下載
- iOS17.1可能明天發(fā)布,iOS17.1主要修復哪些問題? 376
- 一文詳解ZGC關鍵技術 26
- AMD推出銳龍 Threadripper 7000系列處理器 171
- 如何使用pthread_barrier_xxx系列函數(shù)來實現(xiàn)多線程之間的同步? 29
- SpringBoot物理線程、虛擬線程、Webflux性能比較 37
- SV線程的使用和控制 121
- Python 如何獲取旅游景點信息 82
- 新一輪制裁,摩爾線程、壁仞等IC公司上實體清單,英偉達AI芯片限制出售! 927
- 英偉達H800和A800將禁運!美國將摩爾線程、壁仞列入貿易管制“黑名單” 301
- i9-14900K/i7-14700K處理器首發(fā)評測 135