GCD学习

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");
    });
}


你可能感兴趣的:(GCD学习)