GCD中的dispatch_get_global_queue(long identifier, unsigned long flags)

GCD默认已经提供了全局的并发队列供整个应用使用,所以可以不用手动创建。

创建全局队列的函数为

dispatch_queue_t q = dispatch_get_global_queue(long identifier, unsigned long flags)

参数类型为:

long identifier:ios 8.0 告诉队列执行任务的“服务质量 quality of service”,系统提供的参数有:

QOS_CLASS_USER_INTERACTIVE 0x21,              用户交互(希望尽快完成,用户对结果很期望,不要放太耗时操作)

     QOS_CLASS_USER_INITIATED 0x19,                用户期望(不要放太耗时操作)
     QOS_CLASS_DEFAULT 0x15,                        默认(不是给程序员使用的,用来重置对列使用的)
     QOS_CLASS_UTILITY 0x11,                        实用工具(耗时操作,可以使用这个选项)
     QOS_CLASS_BACKGROUND 0x09,                     后台
     QOS_CLASS_UNSPECIFIED 0x00,                    未指定
     iOS 7.0 之前 优先级
     DISPATCH_QUEUE_PRIORITY_HIGH 2                 高优先级
     DISPATCH_QUEUE_PRIORITY_DEFAULT 0              默认优先级
     DISPATCH_QUEUE_PRIORITY_LOW (-2)               低优先级

     DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN  后台优先级

BACKGROUND表示用户不需要知道任务什么时候完成,如果选择这个选项速度慢得令人发指,非常不利于调试!对于优先级推荐不要搞得太负责,就用最简单,以免发生优先级反转。

unsigned long flags:苹果官方文档是这样解释的: Flags that are reserved for future use。标记是为了未来使用保留的!所以这个参数应该永远指定为0

如果做ios8.0与ios7.0的适配,可以这样创建全局队列:

dispatch_queue_t q = dispatch_get_global_queue(0, 0);

试着用全局队列来做一下异步操作,看看是否为并发执行,如下代码

 dispatch_queue_t q = dispatch_get_global_queue(0, 0); 
时间: 2024-08-05 04:38:09

GCD中的dispatch_get_global_queue(long identifier, unsigned long flags)的相关文章

GCD 中Group的使用

使用Group实现:先执行一系列操作(在group中),执行完成后再执行别的操作. 1.创建group及任务队列(目的是让group中的所有任务执行完再执行别的任务) dispatch_group_t group = dispatch_group_create(); //创建一个group        dispatch_queue_t globeQ = dispatch_get_global_queue(0, 0); //该方法获取全局队列(每一次得到的都是同一个队列)    2.提交任务到g

GCD中的队列与任务

一.简介: Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法.它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统.它是一个在线程池模式的基础上执行的并行任务.在Mac OS X 10.6雪豹中首次推出,也可在IOS 4及以上版本使用. GCD是一个替代诸如NSThread等技术的很高效和强大的技术.GCD完全可以处理诸如数据锁定和资源泄漏等复杂的异步编程问题.GCD的工作原理是让一个程序,根据可用的处理资源,安排他们在任何可用的处理

关于GCD中的队列

队列分为串行队列,并发队列,全局队列和主队列: 串行队列:一次只能安排一个任务. dispatch_queue_t q = dispatch_queue_create("itcast",DISPATCH_QUEUE_SERIA); DISPATCH_QUEUE_SERIAL==NULL: 并发队列:一次可安排多个任务. dispatch_queue_t q = dispatch_queue_create("itcast", DISPATCH_QUEUE_CONCUR

GCD中一些API的使用

GCD中一些API的使用 1.串行队列和并行队列 iOS中线程分为串行队列和并行队列,串行队列指的是任务按照先后顺序,依次执行:并行队列指的是任务不按照加入的先后顺序,并发的执行. iOS中串行队列通过如下方式进行创建 dispatch_queue_t queue = dispatch_queue_create("cn.bourbonz.www", DISPATCH_QUEUE_SERIAL); 需要注意的是,引号中的内容表示的是对该队列的描述,后面的参数代表的是串行队列. 并行队列通

GCD中如何延迟处理任务

在实际的开发中,经常会遇到想要在指定的时间间隔后执行某个处理 <一>在GCD中提供了dispatch_after函数来完成这一操作 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ <#code to be executed after a specified delay#>

GCD中使用dispatch_after函数延迟处理任务

在实际的开发中,经常会遇到想要在指定的时间间隔后执行某个处理 <一>在GCD中提供了dispatch_after函数来完成这一操作 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ <#code to be executed after a specified delay#>

GCD中的线程死锁问题

GCD 确实好用 ,很强大,相比NSOpretion 无法提供 取消任务的功能. 如此强大的工具用不好可能会出现线程死锁. 如下代码: - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"=================4"); dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"=================5"); }); NSLog(@"===

iOS多线程---GCD中线程的通信

在子线程的任务完成后,有时候需要从子线程回到主线程,刷新UI. 从子线程中回到主线程,以前已经写过一种方法: [self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO]; 现在GCD又提供了一种方法: dispatch_async(dispatch_get_main_queue(), ^{ self.imageView.image=image; }); 示例

iOS开发 多线程(一)GCD中dispatch队列知识

GCD编程的核心就是dispatch队列,dispatch block的执行最终都会放进某个队列中去进行,它类似NSOperationQueue但更复杂也更强大,并且可以嵌套使用.所以说,结合block实现的GCD,把函数闭包(Closure)的特性发挥得淋漓尽致. dispatch队列的生成可以有这几种方式: 1. dispatch_queue_t queue = dispatch_queue_create("com.dispatch.serial", DISPATCH_QUEUE_