GCD的两个核心概念:
任务:执行什么操作
队列:用来存放任务
GCD的两个使用步骤:
1.定制任务:确定想做的事
2.将任务添加到队列:GCD会自动将任务从队列中取出,放到对应的线程中执行。
GCD中有2个执行任务的函数
//1.用同步的方式执行(不开线程) dispatch_sync(dispatch_queue_t queue, ^(void)block) //2.用异步的方式执行(自动开启多线程) dispatch_async(dispatch_queue_t queue, ^(void)block)
GCD中的队列
//队列分并发队列和串行队列 //1. 获取全局并发队列: dispatch_queue_t queue = dispatch_get_global_queue(long identifier, unsigned long flags) //参数1:优先级(枚举类型,一般用默认值0) //参数2:苹果官方设置的备用参数,目前无用,暂时传值0 //2. 获取串行队列(两种方式): //自己创建队列: dispatch_queue_t queue = dispatch_queue_create("hjl.queue", NULL); //获取主线程队列: dispatch_queue_t queue = dispatch_get_main_queue();
两两结合,共四种执行方案
/** * 用dispatch_async异步函数往并发队列中添加任务 * 异步函数 + 并发队列 = 开启新线程(多个) */ - (void)asyncGlobaQueue{ //1.获取全局的并发队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //2.添加任务到队列中,执行 dispatch_async(queue, ^{ NSLog(@"任务1"); }); dispatch_async(queue, ^{ NSLog(@"任务2"); }); } /** * 用dispatch_async异步函数往串行队列中添加任务 * 异步函数 + 串行队列 = 开启新线程(1个) */ - (void)asyncSerialQueue{ //1.创建串行队列 dispatch_queue_t queue = dispatch_queue_create("hjl.queue", NULL); //2.添加任务到队列中,执行 dispatch_async(queue, ^{ NSLog(@"任务1"); }); dispatch_async(queue, ^{ NSLog(@"任务2"); }); } /** * 用dispatch_sync同步函数往并发队列中添加任务 * 同步函数 + 并发队列 = 不开新线程 */ - (void)syncGlobaQueue{ //1.获取全局的并发队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //2.添加任务到队列中,执行 dispatch_sync(queue, ^{ NSLog(@"任务1"); }); dispatch_sync(queue, ^{ NSLog(@"任务2"); }); } /** * 用dispatch_sync同步函数往串行队列中添加任务 * 同步函数 + 串行队列 = 不开新线程 */ - (void)syncSerialQueue{ //1.创建串行队列 dispatch_queue_t queue = dispatch_queue_create("hjl.queue", NULL); //2.添加任务到队列中,执行 dispatch_sync(queue, ^{ NSLog(@"任务1"); }); dispatch_sync(queue, ^{ NSLog(@"任务2"); }); }