天天看點

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