ios中多線程有三種,NSTread, NSOperation,GCD
這篇就講講GCD的基本用法
平時比較多使用和看到的是:
復制代碼
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//異步操作代碼塊
dispatch_async(dispatch_get_main_queue(), ^{
//回到主線程操作代碼塊
});
});
復制代碼
比較多的用於更新ui操作
比如從數據庫獲取數據需要花較長的時間,又不希望卡主線程,就把獲取數據庫數據操作放在異步操作代碼快中,等獲取結束,回調主線程,更新ui,在主線程操作代碼塊中進行操作
下面我們來解析一下這代碼塊中的每個方法:
復制代碼
dispatch_async(<#dispatch_queue_t queue#>, <#^(void)block#>)
表示異步操作,與之對應的是
dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>),同步操作,block中的代碼執行完了才能執行後面的操作
方法中第一個參數 dispatch_queue_t queue 表示隊列,無非是兩種:串行和並行,另外可自建串行或並行隊列
獲取系統串行隊列,也就是主線程串行隊列:
dispatch_get_main_queue()
獲取系統並行隊列:
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
其中第一個參數,是隊列優先級,有四種:
#define DISPATCH_QUEUE_PRIORITY_HIGH 2
#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0
#define DISPATCH_QUEUE_PRIORITY_LOW (-2)
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN
會根據優先級高低,進行處理
自建隊列:
dispatch_queue_create("com.example.serial", NULL);
第一個參數,文檔規范說:
A string label to attach to the queue.這個字符串需要唯一性,一般是以上形式呈現
第二個參數傳NULL或者 DISPATCH_QUEUE_SERIAL 表示串行
傳 DISPATCH_QUEUE_CONCURRENT表示並行
當執行結束,必須要有 dispatch_release(),將隊列釋放
復制代碼
最近看到一篇文章講到GCD, 比較深入,還有些沒有理解,以上我描述的內容是GCD較為基礎的用法,一般程序也就用到這些