GCD(Grand-Central-Dispatch)是iOS中實現多線程中最經常使用,最好用的一種實現方法,管理起來也比較方便,由於iOS系統已經爲咱們作了不少的內部處理。我再用GCD管理多線程問題就顯得容易了不少。html
2、GCD是純C語言的,所以咱們在編寫GCD相關代碼的時候,面對的函數,而不是方法。在GCD中最經常使用的函數有一下幾個:多線程
1.建立隊列:async
dispatch_queue_t queue = dispatch_queue_create("com.LD.myQueue",NULL);函數
第一個參數表示隊列的名字;spa
第二個參數表示隊列的屬性,第二個參數傳NULL或者DSIPATCH_QUEUE_SERIAL代表要建立一個Serial Dispatch Queue(串行隊列), 傳入DISPATCH_QUEUE_CONCURRENT 建立一個 Concurrent Dispatch Queue(並行隊列)。.net
2.獲取主隊列:線程
dispatch_queue_t queue = dispatch_get_main_queue();htm
更新程序UI界面要在主隊列中執行;blog
3.獲取全局隊列:隊列
dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
全局隊列是並行隊列;
dispatch_get_global_queue第一個參數是隊列的優先級,分別對應四個全局隊列:
DISPATCH_QUEUE_PRIORITY_HIGH
DISPATCH_QUEUE_PRIORITY_DEFAULT
DISPATCH_QUEUE_PRIORITY_LOW
DISPATCH_QUEUE_PRIORITY_BACKGROUND
dispatch_get_global_queue中第二個參數目前系統保留,請設置爲0便可。
4.獲取當前隊列:
dispatch_queue_t currentQueue dispatch_get_currentQueue();
若是在隊列執行任務中調用,返回執行此任務的隊列;若是在主線程中調用,將返回主隊列;若是在通常線程(非主線程線程非隊列執行任務)中調用,返回DISPATCH_QUEUE_PRIORITY_DEFAULT全局隊列。
5.在隊列中分配任務:
dispatch_async(queue,^{
// do something
});
GCD 的參考連接:
下面的連接是CSDN中M了個J的一篇博文,寫的至關精彩,分析的十分詳細,可是博文寫的比較早,有一些技術已經發生了改變。例如,dispatch_queue的釋放問題,在iOS5一以前的系統中,dispatch_queue是必需要手動釋放的,而在iOS6以後蘋果的ARC也可以作到dispatch_queue 的自動釋放。而博文中依然要手動釋放,這點須要注意。