天天看点

GCD-group、notify、wait

1 dispatch_group_notify,dispatch_group_async执行完后再执行notify;

2 dispatch_group_wait后代码等group执行完,再执行;

例1 dispatch_group_notify

- (void)groupAsyncSummit_notify{

    dispatch_group_t group = dispatch_group_create();

    dispatch_group_async(group, _mainQueue, ^{

        [self doSometing:@"1"];

        });

    dispatch_group_async(group, _mainQueue, ^{

        [self doSometing:@"2"];

    });

    dispatch_group_notify(group, _globalQueue, ^{

        [self doSometing:@"notify"];

    });

    dispatch_group_async(group, _globalQueue, ^{

        [self doSometing:@"3"];

        [self doSometing:@"3-1"];

    });

    [self doSometing:@"4"];

}

输出:43并发,再3-1、1并发,再执行2,最后执行notify;

说明:

dispatch_group_async搭_globalQueue,异步并发执行;

dispatch_group_async搭 _mainQueue,异步串行,加在_mainQueue队列的最后;

例2 dispatch_group_wait,

- (void)groupAsyncSummit_wait{

    dispatch_group_t group = dispatch_group_create();

    dispatch_group_async(group, _globalQueue, ^{

        [self doSometing:@"1"];

    });

    dispatch_group_async(group, _globalQueue, ^{

        [self doSometing:@"2"];

    });

    dispatch_group_async(group, _globalQueue, ^{

        [self doSometing:@"3"];

    });

    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

    [self doSometing:@"4"];

}

输出:1 2 3 并发执行 , 4最后执行

说明:dispatch_group_wait后代码等group执行完,再执行;

GCD