您的位置:首页 > 移动开发 > IOS开发

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

2015-11-08 20:16 561 查看
有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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gcd ios