有2種方法獲取隊列:
①dispatch_queue_create
②Main Dispatch Queue/Global Dispatch Queue
1.dispatch_queue_create
//參數1:隊列名字
//參數2:隊列優先級
dispatch_queue_t mySerialDispatchQueue = dispatch_queue_create("myQueue", NULL);
/*
* 儘管有ARC這一通過編譯器自動管理內存的優秀記述,但生成的Dispatch Queue必須由程序員釋放。
* 因爲Dispatch Queue並沒有像block那樣具有作爲Objective-C對象來處理的技術
*/
dispatch_async(myQueue, ^{NSLog(@"block on myQueue");});
//這也像OC中的引用計數式內存管理一樣,需要通過retain和release函數的引用計數來管理內存
dispatch_release(myQueue);
dispatch_retain;
PS:一個問題
/* 一個問題:
dispatch_async函數中追加block到concurrent dispatch queue,並立即通過dispatch_release進行釋放是否可以?即如下方式寫代碼可以嗎?
*/
dispatch_async(myQueue, ^{NSLog(@"block on myQueue");});
dispatch_release(myQueue);
/* 回答:
完全沒問題。即便立即釋放隊列,該隊列由於被block持有不會立即釋放,block因而可以繼續執行。block執行結束後會釋放隊列,這時誰都不持有隊列,隊列會被廢棄。
*/
2.Main Dispatch Queue/Global Dispatch Queue
①Main Dispatch Queue:即主線程隊列
渲染UI的操作必須放在主線程中
②Global Dispatch Queue:所有應用程序都能夠使用的concurrent dispatch queue
它有4個優先級:
high、default、low、background