在主线程上执行:同步执行
dispatch_async(dispatch_get_main_queue(), ^{
});
在后台执行:也就是异步执行
dispatch_async(dispatch_get_global_queue(0, 0), ^{
});
GCD队列的用法:
1,异步队列:
dispatch_queue_t queue = dispatch_queue_create("gaobo", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
NSLog(@"1");
});
dispatch_async(queue, ^{
NSLog(@"2");
});
dispatch_async(queue, ^{
NSLog(@"3");
});
dispatch_async(queue, ^{
NSLog(@"4");
});
dispatch_async(queue, ^{
NSLog(@"5");
});
2,同步队列:
dispatch_queue_t queue = dispatch_queue_create("gaobo", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{
NSLog(@"1");
});
dispatch_async(queue, ^{
NSLog(@"2");
});
dispatch_async(queue, ^{
NSLog(@"3");
});
dispatch_async(queue, ^{
NSLog(@"4");
});
dispatch_async(queue, ^{
NSLog(@"5");
});
GCD group的用法
1,同步group:
dispatch_queue_t queue = dispatch_queue_create("gaobo", DISPATCH_QUEUE_SERIAL);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
NSLog(@"Do some work 1 here");
});
dispatch_group_async(group, queue, ^{
NSLog(@"Do some work 2 here");
});
dispatch_group_async(group, queue, ^{
NSLog(@"Do some work 3 here");
});
dispatch_group_async(group, queue, ^{
NSLog(@"Do some work 4 here");
});
dispatch_group_async(group, queue, ^{
NSLog(@"Do some work 5 here");
});
dispatch_group_notify(group, queue, ^{
NSLog(@"group complete");
});
1,异步group:
dispatch_queue_t queue = dispatch_queue_create("gaobo", DISPATCH_QUEUE_CONCURRENT);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
NSLog(@"Do some work 1 here");
});
dispatch_group_async(group, queue, ^{
NSLog(@"Do some work 2 here");
});
dispatch_group_async(group, queue, ^{
NSLog(@"Do some work 3 here");
});
dispatch_group_async(group, queue, ^{
NSLog(@"Do some work 4 here");
});
dispatch_group_async(group, queue, ^{
NSLog(@"Do some work 5 here");
});
dispatch_group_notify(group, queue, ^{
NSLog(@"group complete");
});
使用dispatch_barrier_async控制并发任务
在并发任务队列中,可以使用dispatch_barrier_async来对任务做分隔保护,dispatch_barrier_async之前加入到队列的任务执行完成后,才能执行后续加入的任务。barrier英文意思为障碍物,因此我们可以理解为执行完前面的任务才能越过障碍物执行后续的任务。
dispatch_queue_t queue = dispatch_queue_create("com.yourdomain.TestQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
[NSThread sleepForTimeInterval:1];
NSLog(@"Do some work 1 here");
});
dispatch_async(queue, ^{
[NSThread sleepForTimeInterval:1];
NSLog(@"Do some work 2 here");
});
dispatch_async(queue, ^{
[NSThread sleepForTimeInterval:1];
NSLog(@"Do some work 3 here");
});
dispatch_barrier_async(queue, ^{
NSLog(@"Do some work 4 here");
});
dispatch_async(queue, ^{
[NSThread sleepForTimeInterval:1];
NSLog(@"Do some work 5 here");
});