iOS中的GCD(2)---獲取隊列方法

有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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章