在一些社交应用比如微博配图时张数不确定, 如何动态调整图片的尺寸? GCD调度组可以解决我们的难题.
下面代码统一监听A/B任务完成, 才执行更新UI
- (void)group1 {
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
// 全局队列调度了两个任务
dispatch_group_async(group, queue, ^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"A -- %@", [NSThread currentThread]);
});
dispatch_group_async(group, queue, ^{
[NSThread sleepForTimeInterval:0.5];
NSLog(@"B -- %@", [NSThread currentThread]);
});
// 需求,A & B 同时完成,统一监听
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"Update UI %@", [NSThread currentThread]);
});
}
原理代码
- (void)group2 {
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
// 1. 入组, 后续Block(任务A)受到群组的监听
dispatch_group_enter(group);
dispatch_async(queue, ^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"A -- %@", [NSThread currentThread]);
// 出组, 执行完Block出组
dispatch_group_leave(group);
});
// 2. 入组, 后续Block(任务B)受到群组的监听
dispatch_group_enter(group);
dispatch_async(queue, ^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"B -- %@", [NSThread currentThread]);
// 出组, 执行完Block出组
dispatch_group_leave(group);
});
// 监听调度组, 群组为空, 监听完成, 开始执行下面任务
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"Update UI %@", [NSThread currentThread]);
});
}
好处: 后续的Block可以是任意框架的Block–>AFN, SDWebImage