GCD的常用方法

2017-03-07  本文已影响0人  云边画月

一. 队列的创建方法

可以使用dispatch_queue_create来创建对象,需要传入两个参数,第一个参数表示队列的唯一标识符,用于DEBUG,可为空;第二个参数用来识别是串行队列还是并发队列。DISPATCH_QUEUE_SERIAL表示串行队列,DISPATCH_QUEUE_CONCURRENT表示并发队列。

// 串行队列的创建方法
dispatch_queue_t queue= dispatch_queue_create("test.queue", DISPATCH_QUEUE_SERIAL);
// 并发队列的创建方法
dispatch_queue_t queue= dispatch_queue_create("test.queue", DISPATCH_QUEUE_CONCURRENT);

二. 任务的创建方法

// 同步执行任务创建方法
dispatch_sync(queue, ^{
NSLog(@"%@",[NSThread currentThread]);    // 这里放任务代码});
// 异步执行任务创建方法
dispatch_async(queue, ^{
NSLog(@"%@",[NSThread currentThread]);    // 这里放任务代码});

虽然使用GCD只需两步,但是既然我们有两种队列,两种任务执行方式,那么我们就有了四种不同的组合方式。这四种不同的组合方式是

实际上,我们还有一种特殊队列是主队列,那样就有六种不同的组合方式了。

那么这几种不同组合方式各有什么区别呢,这里为了方便,先上结果,再来讲解。为图省事,直接查看表格结果,然后可以跳过 4. GCD的基本使用 了。

三. GCD的基本使用

先来讲讲并发队列的两种使用方法。

1. 并发队列 + 同步执行

不会开启新线程,执行完一个任务,再执行下一个任务
- (void) syncConcurrent{
NSLog(@"syncConcurrent---begin");

dispatch_queue_t queue= dispatch_queue_create("test.queue", DISPATCH_QUEUE_CONCURRENT);

dispatch_sync(queue, ^{
    for (int i = 0; i < 2; ++i) {
        NSLog(@"1------%@",[NSThread currentThread]);
    }
});
dispatch_sync(queue, ^{
    for (int i = 0; i < 2; ++i) {
        NSLog(@"2------%@",[NSThread currentThread]);
    }
});
dispatch_sync(queue, ^{
    for (int i = 0; i < 2; ++i) {
        NSLog(@"3------%@",[NSThread currentThread]);
    }
});
NSLog(@"syncConcurrent---end");
}

2.并发队列 + 异步执行

可同时开启多线程,任务交替执行
- (void) asyncConcurrent{
NSLog(@"asyncConcurrent---begin");

dispatch_queue_t queue= dispatch_queue_create("test.queue", DISPATCH_QUEUE_CONCURRENT);

dispatch_async(queue, ^{
    for (int i = 0; i < 2; ++i) {
        NSLog(@"1------%@",[NSThread currentThread]);
    }
});
dispatch_async(queue, ^{
    for (int i = 0; i < 2; ++i) {
        NSLog(@"2------%@",[NSThread currentThread]);
    }
});
dispatch_async(queue, ^{
    for (int i = 0; i < 2; ++i) {
        NSLog(@"3------%@",[NSThread currentThread]);
    }
});
NSLog(@"asyncConcurrent---end");
}

3.串行队列 + 同步执行

4. 串行队列 + 异步执行

备注:文章摘自“行走的少年郎”,欢迎关注原作者。

上一篇下一篇

猜你喜欢

热点阅读