iOS中的GCD(2)---获取队列方法

时间:2022-11-30 05:22:39

有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