ios-UI高階 GCD的相關設定
1、GCD(Grand Central Dispatch)可理解為:“牛逼的中心排程”
·Apple提供的一套更底層、更高效的併發程式設計技術,純C語言、基於Block ·支援同步或非同步任務處理,序列、並行的處理佇列,非系統呼叫的訊號量機制,定時任務處理,程式、檔案或網路的監聽任務等
優點
·易用: GCD比之thread更簡單易用。基於block的特性導致它能簡單的在不同代 碼作用域之間傳遞上下文
·效率: GCD實現功能 輕量、優雅,使得它在很多地方比之專門建立消耗資源的執行緒更 實用且快速
·效能: GCD自動根據系統負載來增減執行緒數量,這就減少了上下文切換以及增加了計算效率
·安全: 無需加鎖或其他同步機制
2、Dispatch Queue
Dispatch Queue是執行處理的等待佇列,通過dispatch_async等函式,按照先進先出(FIFO)順序追加到Queue中執行處理時,存在兩種 Dispatch Queue:
·Serial Dispatch Queue --- 需等待現在正在執行的任務處理結束(序列)
·Concurrent Dispatch Queue --- 不需等待現在正在執行的任務處理結束(併發)
·Main Dispatch Queue(dispatch_get_main_queue)
a) 主佇列,在主執行緒裡執行的佇列。因為主執行緒只有一個,所以 Main Dispatch
Queue屬於Serial Dispatch Queue
b) 一切跟UI有關的操作必須放在主執行緒中執行,所以要追加到Main Dispatch Queue
·Global Dispatch Queue(dispatch_get_global_queue)全域性佇列,所有應用程式都能夠使用的 Concurrent Dispatch Queue
3、GCD的使用
a) 新增任務
·dispatch_async 提交一個非同步執行的block塊
·dispatch_sync 提交一個同步執行的block塊
注意:使用 dispatch_sync 容易引起死鎖,慎重使用。比如在主執行緒裡面執行 往主佇列裡面新增任務的操作就會引起死鎖
b) 延遲任務 dispatch_after
·dispatch_after 等待指定的時間後非同步的新增一個block塊到指定佇列裡面,不堵塞
當前執行緒。
c) 一次任務 dispatch_once
·保證dispatch_once中的程式碼塊在應用程式裡面只執行一次
d) 設定佇列優先順序 dispatch_set_target_queue
DISPATCH_QUEUE_PRIORITY_HIGH 2
DISPATCH_QUEUE_PRIORITY_DEFAULT 0
DISPATCH_QUEUE_PRIORITY_LOW (-2)
DISPATCH_QUEUE_PRIORITY_BACKGROUND
e) 掛起任務 dispatch_suspend
f) 恢復任務 dispatch_resume
g) 多元呼叫(迭代)
·dispatch_apply 提交一個多元呼叫的block塊到佇列裡面,並且等待block任務的所
有迭代 完成之後才返回
·dispatch_group_async 監視一組block任務的完成,多個任務都結束後 的一個彙總
處理,可以同步或非同步地監視
·dispatch_group_notify 所有任務執行結束彙總,不阻塞當前執行緒 ·dispatch_group_wait 等待直到所有任務執行結束,中途不能取消,阻塞當前執行緒
4、NSRunloop的基本概念
·Run Loop 是執行緒相關的的基礎框架的一部分。一個 run loop 就是一個事件處理 的迴圈,用來不停的排程工作以及處理輸入事件。
·執行緒的生命週期存在五個狀態:新建、就緒、執行、阻塞、死亡 ·NSRunLoop可以保持一個執行緒一直為活動狀態,不會馬上銷燬掉
注意:主執行緒中的RunLoop默為YES
·Apple提供的一套更底層、更高效的併發程式設計技術,純C語言、基於Block ·支援同步或非同步任務處理,序列、並行的處理佇列,非系統呼叫的訊號量機制,定時任務處理,程式、檔案或網路的監聽任務等
優點
·易用: GCD比之thread更簡單易用。基於block的特性導致它能簡單的在不同代 碼作用域之間傳遞上下文
·效率: GCD實現功能 輕量、優雅,使得它在很多地方比之專門建立消耗資源的執行緒更 實用且快速
·效能: GCD自動根據系統負載來增減執行緒數量,這就減少了上下文切換以及增加了計算效率
·安全: 無需加鎖或其他同步機制
2、Dispatch Queue
Dispatch Queue是執行處理的等待佇列,通過dispatch_async等函式,按照先進先出(FIFO)順序追加到Queue中執行處理時,存在兩種 Dispatch Queue:
·Serial Dispatch Queue --- 需等待現在正在執行的任務處理結束(序列)
·Concurrent Dispatch Queue --- 不需等待現在正在執行的任務處理結束(併發)
·Main Dispatch Queue(dispatch_get_main_queue)
a) 主佇列,在主執行緒裡執行的佇列。因為主執行緒只有一個,所以 Main Dispatch
Queue屬於Serial Dispatch Queue
b) 一切跟UI有關的操作必須放在主執行緒中執行,所以要追加到Main Dispatch Queue
·Global Dispatch Queue(dispatch_get_global_queue)全域性佇列,所有應用程式都能夠使用的 Concurrent Dispatch Queue
3、GCD的使用
a) 新增任務
·dispatch_async 提交一個非同步執行的block塊
·dispatch_sync 提交一個同步執行的block塊
注意:使用 dispatch_sync 容易引起死鎖,慎重使用。比如在主執行緒裡面執行 往主佇列裡面新增任務的操作就會引起死鎖
b) 延遲任務 dispatch_after
·dispatch_after 等待指定的時間後非同步的新增一個block塊到指定佇列裡面,不堵塞
當前執行緒。
c) 一次任務 dispatch_once
·保證dispatch_once中的程式碼塊在應用程式裡面只執行一次
d) 設定佇列優先順序 dispatch_set_target_queue
DISPATCH_QUEUE_PRIORITY_HIGH 2
DISPATCH_QUEUE_PRIORITY_DEFAULT 0
DISPATCH_QUEUE_PRIORITY_LOW (-2)
DISPATCH_QUEUE_PRIORITY_BACKGROUND
e) 掛起任務 dispatch_suspend
f) 恢復任務 dispatch_resume
g) 多元呼叫(迭代)
·dispatch_apply 提交一個多元呼叫的block塊到佇列裡面,並且等待block任務的所
有迭代 完成之後才返回
dispatch_async(dispatch_get_global_queue(0, 0), ^{
/*
<#size_t iterations#>:迭代次數
queue:迭代的佇列
<#^(size_t)block#>:迭代過程彙總每次要做的事情
*/
dispatch_apply(array.count, dispatch_get_global_queue(0, 0), ^(size_t i) { //i:迭代的變數
NSNumber *number = array[i];
NSLog(@"%.2f",[number floatValue]);
});
});
h) 組任務·dispatch_group_async 監視一組block任務的完成,多個任務都結束後 的一個彙總
處理,可以同步或非同步地監視
·dispatch_group_notify 所有任務執行結束彙總,不阻塞當前執行緒 ·dispatch_group_wait 等待直到所有任務執行結束,中途不能取消,阻塞當前執行緒
4、NSRunloop的基本概念
·Run Loop 是執行緒相關的的基礎框架的一部分。一個 run loop 就是一個事件處理 的迴圈,用來不停的排程工作以及處理輸入事件。
·執行緒的生命週期存在五個狀態:新建、就緒、執行、阻塞、死亡 ·NSRunLoop可以保持一個執行緒一直為活動狀態,不會馬上銷燬掉
注意:主執行緒中的RunLoop默為YES
相關文章
- GoLand 相關設定GoLand
- 除法與GCD演算法的相關分析GC演算法
- Android 高階面試-1:Handler 相關Android面試
- Android 高階面試-2:IPC 相關Android面試
- css中關於table的相關設定CSS
- Hive優化相關設定Hive優化
- Golang技巧之預設值設定的高階玩法Golang
- Mac開發相關設定操作Mac
- Newtonsoft.Json高階篇:TypeNameHandling設定JSON
- Android 高階面試-4:虛擬機器相關Android面試虛擬機
- 《Objective-C 高階程式設計》乾貨三部曲(三):GCD篇Object程式設計GC
- Android 高階面試-3:Java、同步和併發相關Android面試Java
- excel高階篩選怎麼做 表格的高階篩選怎麼設定條件Excel
- SAP相關會計科目的設定OBYC
- MySQL慢查詢日誌相關設定MySql
- centos7版本中ssh相關的設定CentOS
- 前端進階 -- TS相關前端
- 關於CSS中設定overflow屬性的值為hidden的相關理解CSS
- 關於React的高階元件React元件
- Linux Limit相關內容設定大全(值得收藏)LinuxMIT
- JS 相關寬高理解JS
- SDL程式設計入門(23)高階定時器程式設計定時器
- [轉帖]Redis相關的核心引數解釋與設定Redis
- BIOS相關定時器iOS定時器
- 各種相關的圖結構-定義及相關研究進展
- 使用idea外掛ideolog識別log檔案的相關設定Idea
- 樹的定義及相關術語
- Android進階知識:Handler相關Android
- Java程式設計指南:高階技巧解析 - Excel單元格樣式的程式設計設定Java程式設計Excel
- SAP Fiori Elements 應用裡和 Fiori 3 相關的外觀設定
- SAP PM 初級系列3 - 主資料相關的基礎設定
- 設計模式的相關介紹設計模式
- 關於GCD多工處理GC
- GCD Inside: GCD 宏GCIDE
- Python 高階程式設計:深入探索高階程式碼實踐Python程式設計
- Spring定時任務高階使用篇Spring
- 檢查字串是否包含多個關鍵字的高階進階字串
- 關於人像後期處理進階的相關技術步驟
- win10輸入法沒有高階設定怎麼辦_win10系統輸入法高階設定在哪開啟Win10