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

iOS dispatch_group_t

2016-06-28 17:34 363 查看
创建group

dispatch_group_create();


group异步执行

dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, block);


group执行完毕通知

dispatch_group_notify(dispathc_group_t group, dispatch_queue_t queue, block);


group同步执行

dispatch_group_enter(dispatch_group_t group);

dispatch_group_leave(dispatch_group_t group);


group挂起

dispatch_group_wait(dispatch_group_t group, dispatch_time_t time);


例子:

dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
NSLog(@"task1");
});

dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
NSLog(@"task2");
});

dispatch_group_notify(group, dispatch_get_main_queue(), ^ {
NSLog(@"isover1");
});

dispatch_async(dispatch_get_global_queue(0, 0), ^{
for (int i = 0; i < 3; i ++) {
dispatch_group_enter(group);

NSLog([NSString stringWithFormat:@"task%i", i + 10]);

dispatch_group_leave(group);
}
});

dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"isover2");
});


输出

2016-06-28 17:24:34.417 GCD group[14824:1091174] task2
2016-06-28 17:24:34.417 GCD group[14824:1091165] task1
2016-06-28 17:24:34.417 GCD group[14824:1091178] task10
2016-06-28 17:24:34.418 GCD group[14824:1091178] task11
2016-06-28 17:24:34.418 GCD group[14824:1091178] task12
2016-06-28 17:24:34.421 GCD group[14824:1091130] isover2
2016-06-28 17:24:34.421 GCD group[14824:1091130] isover1


说明:

dispatch_group_notify在所有任务执行完成后执行,dispatch_group_wait在notify之前执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios gcd