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較為基礎的用法,一般程序也就用到這些