您的位置:首页 > 移动开发 > IOS开发

GCD-dispatch_group

2017-03-21 14:09 232 查看
创建一个任务组,把一组任务提交到一个或多个队列里面。

可以监听这个任务组在某个确定的队列里完成的通知,以执行后续的任务。

若提交到了多个队列里面,某一个队列完成任务的时候,其他队列不一定完成。

队列里的任务根据队列的属性来串行或者并行执行

示例:

- (IBAction)gcdGroupButtonAction:(UIButton *)sender {
//创建一个并行执行队列
dispatch_queue_t queue = dispatch_queue_create("queueIdentifier", DISPATCH_QUEUE_CONCURRENT);
dispatch_group_t group = dispatch_group_create();

//以下两个任务执行顺序不定,因为它们是并行任务
dispatch_group_async(group, queue, ^{
for (int i = 0; i<5; i++) {
NSLog(@"@thread:%@-------%i",[NSThread currentThread],i);
}
});
dispatch_group_async(group, queue, ^{
for (int i = 0; i<5; i++) {
NSLog(@"#thread:%@-------%i",[NSThread currentThread],i);
}
});

//当指定任务组的指定队列全部执行完成后执行如下代码
dispatch_group_notify(group, queue, ^{
NSLog(@"在%@队列中的任务组%@已执行完",queue,group);
});
}


输出如下:

@thread:{number = 3, name = (null)}——-0

@thread:{number = 3, name = (null)}——-1

@thread:{number = 3, name = (null)}——-2

@thread:{number = 3, name = (null)}——-3

@thread:{number = 3, name = (null)}——-4

#thread:{number = 3, name = (null)}——-0

#thread:{number = 3, name = (null)}——-1

#thread:{number = 3, name = (null)}——-2

#thread:{number = 3, name = (null)}——-3

#thread:{number = 3, name = (null)}——-4

在 < OS_dispatch_queue: queueIdentifier[0x17016ae00]>队列中的任务组已执行完
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息