標籤:style blog http io color os 使用 sp 資料
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較為基礎的用法,一般程式也就用到這些
http://justsee.iteye.com/blog/1883409
感謝作者如此深入的分析,受益匪淺
ios多線程-GCD基本用法