接以上项目,我们开始 GCD 并行队列的使用
创建按钮入口
UIButton *btn4 = [UIButton buttonWithType:UIButtonTypeCustom];
btn4.frame = CGRectMake(40, 300, 100, 40);
[btn4 setTitle:@"GCD并行" forState:UIControlStateNormal];
[btn4 setBackgroundColor:[UIColor blueColor]];
[btn4 addTarget:self action:@selector(click_GCD_Parallel) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn4];
dispatch_get_global_queue
情况一:同步任务 + 全局队列
可以在任务创建时,设置在队列中的优先级
/*
//GCD - 并行队列中任务的执行优先级
* - DISPATCH_QUEUE_PRIORITY_HIGH: QOS_CLASS_USER_INITIATED
* - DISPATCH_QUEUE_PRIORITY_DEFAULT: QOS_CLASS_DEFAULT
* - DISPATCH_QUEUE_PRIORITY_LOW: QOS_CLASS_UTILITY
* - DISPATCH_QUEUE_PRIORITY_BACKGROUND: QOS_CLASS_BACKGROUND
*/
dispatch_sync(dispatch_get_global_queue(0, 0), ^{
NSLog(@"开始子线程 :task1");
for (int i = 10; i <= 20 ; i ++) {
sleep(1);
NSLog(@"当前线程名称:%@ ——%d",[NSThread currentThread].name,i);
if (i == 20) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"回到主线程,task1");
});
}
}
});
dispatch_sync(dispatch_get_global_queue(-2, 0), ^{
NSLog(@"开始子线程 :task2");
for (int i = 20; i <= 30 ; i ++) {
sleep(1);
NSLog(@"当前线程名称:%@ ——%d",[NSThread currentThread].name,i);
if (i == 30) {
dispatch_async(dispatch_get_main_queue(), ^