#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
/**
* disoatch group 是GCD的一项特性,能够把任务分组
*/
- (void)viewDidLoad {
[super viewDidLoad];
//1、创建
dispatch_group_t group = dispatch_group_create();
//任务编组的两组方法
//一:
void dispatch_group_async(dispatch_group_t group,dispatch_queue_t queue,dispatch_block_t block);
//二:
void dispatch_group_enter(dispatch_group_t group);
void dispatch_group_leave(dispatch_group_t group);
//用于等待dispatch group执行完毕
long dispatch_group_wait(dispatch_group_t group,dispatch_time_t timeout);//要等待的group,等待执行完毕时,阻塞时间
void dispatch_group_notify(dispatch_group_t group,dispatch_queue_t queue,dispatch_block_t block);
//令数组中每个对象都执行某项任务,并且想等待所有任务执行完毕。
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t dispatchGroup = dispatch_group_create();
NSArray *collection;
for (id object in collection) {
dispatch_group_async(dispatchGroup, queue, ^{
//object do task
});
}
dispatch_group_wait(dispatchGroup,DISPATCH_TIME_FOREVER);//直到处理完所有任务
//若当前线程不应阻塞,则用notify代替wait
dispatch_queue_t notifyQueue = dispatch_get_main_queue();
dispatch_group_notify(dispatchGroup, notifyQueue, ^{
// block处理完所有任务
});
//把任务提交到并发队列
dispatch_queue_t lowPriorityQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
dispatch_queue_t highPriorityQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0);
NSArray *lowPriorityQueueObjects;
NSArray *highPriorityQueueObjects;
for (id object in lowPriorityQueueObjects){
dispatch_group_async(dispatchGroup, lowPriorityQueue, ^{
// object perform task
});
}
for (id object in highPriorityQueueObjects){
dispatch_group_async(dispatchGroup, highPriorityQueue, ^{
//object perform task
});
}
dispatch_queue_t notifyQueue1 = dispatch_get_main_queue();
dispatch_group_notify(dispatchGroup, notifyQueue1, ^{
//
});
//GCD方法实现,数组每个元素执行任务
dispatch_queue_t queueGCD = dispatch_queue_create("www.queue", NULL);
dispatch_apply(10, queueGCD, ^(size_t i) {
//perform task
});
//等效于
for (int i = 0; i<10;i++){
//perform task
}
}
@end
转载于:https://my.oschina.net/u/2319073/blog/651751