- 是系统为了方便程序员开发提供的,其工作表现与
并发队列一致
全局队列 & 并发队列的区别
- 全局队列
- 没有名称
- 无论 MRC & ARC 都不需要考虑释放
- 日常开发中,建议使用”全局队列”
- 并发队列
- 有名字,和
NSThread的name属性作用类似 - 如果在 MRC 开发时,需要使用
dispatch_release(q);释放相应的对象 dispatch_barrier必须使用自定义的并发队列- 开发第三方框架时,建议使用并发队列
- 有名字,和
全局队列 异步任务
/**提问:是否开线程?是否顺序执行?come here 的位置?*/- (void)gcdDemo8 {// 1. 队列dispatch_queue_t q = dispatch_get_global_queue(0, 0);// 2. 执行任务for (int i = 0; i < 10; ++i) {dispatch_async(q, ^{NSLog(@"%@ - %d", [NSThread currentThread], i);});}NSLog(@"come here");}
运行效果与并发队列相同
参数
- 服务质量(队列对任务调度的优先级)/iOS 7.0 之前,是优先级
- iOS 8.0(新增,暂时不能用,今年年底)
QOS_CLASS_USER_INTERACTIVE0x21, 用户交互(希望最快完成-不能用太耗时的操作)QOS_CLASS_USER_INITIATED0x19, 用户期望(希望快,也不能太耗时)QOS_CLASS_DEFAULT0x15, 默认(用来底层重置队列使用的,不是给程序员用的)QOS_CLASS_UTILITY0x11, 实用工具(专门用来处理耗时操作!)QOS_CLASS_BACKGROUND0x09, 后台QOS_CLASS_UNSPECIFIED0x00, 未指定,可以和iOS 7.0 适配
- iOS 7.0
DISPATCH_QUEUE_PRIORITY_HIGH2 高优先级DISPATCH_QUEUE_PRIORITY_DEFAULT0 默认优先级DISPATCH_QUEUE_PRIORITY_LOW(-2) 低优先级DISPATCH_QUEUE_PRIORITY_BACKGROUNDINT16_MIN 后台优先级
- iOS 8.0(新增,暂时不能用,今年年底)
- 为未来保留使用的,应该永远传入0
结论:如果要适配 iOS 7.0 & 8.0,使用以下代码:
dispatch_get_global_queue(0, 0);
