GCD總結

 

GCDGrand-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 的參考連接:

iOS的GCD中如何關閉或者殺死一個還沒執行完的後臺線程?

下面的連接是CSDN中M了個J的一篇博文,寫的至關精彩,分析的十分詳細,可是博文寫的比較早,有一些技術已經發生了改變。例如,dispatch_queue的釋放問題,在iOS5一以前的系統中,dispatch_queue是必需要手動釋放的,而在iOS6以後蘋果的ARC也可以作到dispatch_queue 的自動釋放。而博文中依然要手動釋放,這點須要注意。

http://blog.csdn.net/q199109106q/article/details/8566300

http://www.cocoachina.com/industry/20131210/7506_2.html

相關文章
相關標籤/搜索