iOS中所支持的多線程編程方法有三種:NSThread、NSOperation&NSoperationQueue、GCD,其中GCD是蘋果官方所推薦使用的。數據庫
GCD全稱Grand Central Dispatch(隊列調度),是一套底層API,提供了一種新的方法來進行併發程序編寫。從基本功能上講,GCD相似NSOperationQueue,都是容許程序將任務切分爲多個單一任務,而後提交至工程隊列來併發地(串行)執行。
編程
GCD是C語言的實現,比NSoperationQueue更底層、更高效,而且它不是Cocoa框架的組成部分,併發任務會想NSoperationQueue那樣基於系統負載來合適地併發進行,串行隊列同一時間只執行單一任務,GCD的API很大程度上基於block。
多線程
GCD的三種隊列任務
併發
1.主線程隊列
框架
主線程隊列, 內部執行任務是串行的同步操做。async
主線程隊列不須要咱們建立,經過dispatch_get_main_queue()方法得到spa
dispatch_queue_t queue = dispatch_get_main_queue();線程
dispatch_async(queue, ^{調試
[self taskThread1];orm
});
或者
dispatch_async(dispatch_get_main_queue(), ^{
[self taskThread2];
});
2.建立私有隊列 用戶隊列/串行隊列
使用C接口,建立一個私有隊列,隊列名是一個C字符串,沒有特別的要求,官方建議用倒裝的標示符來表示(多用於調試)
私有隊列內部也是串行操做
dispatch_queue_t queue = dispatch_queue_create("com.qianfeng", NULL);
dispatch_async(queue, ^{
[self taskThread2];
});
// 咱們本身建立的隊列,非ARC下,咱們須要本身銷燬
//dispatch_release(queue);
3.全局隊列
全局隊列是並行隊列,不須要手動建立,能夠經過dispatch_get_global_queue()方法得到
// 第一個參數是選取按個全局隊列,通常採用DEFAULT,默認優先級隊列
// 第二個參數是保留標誌,目前的版本沒有任何用處(不表明之後版本),直接設置爲0就能夠了
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
在全局隊列裏增長佔用時間很長的block時,例如數據下載,文件操做,數據庫操做等。須要在主隊列中刷新UI(任何狀況下刷新UI,務必在主線程中進行)