使用GCD处理多线程,在多核心CPU下,会提高执行效率,下面是一段在项目中使用的GCD代码。
- (void)gcdDownload
{
static dispatch_once_t once;
static dispatch_queue_t queue;
//create download queue
dispatch_once(&once, ^{
queue =dispatch_queue_create("com.xxx.download.background",DISPATCH_QUEUE_CONCURRENT);
});
//__block type
__block BOOL downloadFlag = NO;
dispatch_async(queue, ^{
// downloadFlag = [Download sendRequest:request];
NSLog(@"长时间任务,如网络下载");
});
dispatch_barrier_async(queue,^{
if (downloadFlag) {
NSLog(@"下载成功完成");
}
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"执行完下载,回掉回主线程,例如刷新UI");
});
});
}
可以向queue里放多个并发block。