行处理的任务(耗时操作)代码放在这里
// 获取主线程,处理UI事件
dispatch_async(dispatch_get_main_queue(), ^{
// UI事件
});
});
}
2、创建任务
// 同步执行任务创建方法
dispatch_sync(queue, ^{ NSLog(@"%@",[NSThread currentThread]); // 这里放任务代码
}); // 异步执行任务创建方法
dispatch_async(queue, ^{ NSLog(@"%@",[NSThread currentThread]); // 这里放任务代码
});
四、队列任务组合
根据(二)中描述,GCD由队列和任务两部分组成,队列分为串行队列、并行队列、主队列,任务可分为同步和异步任务,这样可将队列与任务组合如下:
1、并行队列 & 异步执行
- (void) asyncConcurrentTask { NSLog(@"asyncConcurrentTask---start"); dispatch_queue_t queue= dispatch_queue_create("com.beckwang.queue", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ NSLog(@"Task1------%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"Task2------%@",[NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"Task3------%@",[NSThread currentThread]); }); NSLog(@"asyncConcurrentTask---end"); }
打印结果:
2017-07-02 11:13:10.963 Test[6266:2853210] asyncConcurrentTask---start 2017-07-02 11:13:10.963 Test[6266:2853210] asyncConcurrentTask---end 2017-07-02 11:13:10.963 Test[6266:2854044] Task3------<NSThread: 0x60800007cdc0>{number = 5, name = (null)} 2017-07-02 11:13:10.963 Test[6266:2854059] Task2------<NSThread: 0x60800007d1c0>{number = 4, name = (null)} 2017-07-02 11:13:10.963 Test[6266:2854041] Task1------<NSThread: 0x600000074e80>{number = 3, name = (null)}
结论:
(1) 开启了新线程
(2) 任务之间不需要排队,且具有同时被执行的权利
2、并行队列 & 同步执行
- (void)syncConcurrentTask { dispatch_queue_t queue = dispatch_queue_create("com.beck.wang.queue", DISPATCH_QUEUE_CONCURRENT); NSLog(@"syncConcurrentTask---start---"); dispatch_sync(queue, ^{ NSLog(@"Task1---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"Task2---%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"Task3---%@", [NSThread currentThread]); }); NSLog(@"syncConcurrentTask---end---"); }
打印结果:
2017-07-02 11:25:04.725 Test[6385:2940867] syncConcurrentTask---start---
2017-07-02 11:25:04.725 Test[6385:2940867] Task1---<NSThread: 0x608000067540>{number = 1, name = main} 2017-07-02 11:25:04.726 Test[6385:2940867] Task2---<NSThread: 0x608000067540>{number = 1, name = main} 2017-07-02 11:25:04.726 Test[6385:2940867] Task3---<NSThread: 0x608000067540>{number = 1, name = main} 2017-07-02 11:25:04.726 Test[6385:2940867] syncConcurrentTask---end---
结论:
(1) 不开启了新线程
(2) 任务之间需要排队,按照追加顺序执行
3、串行队列 & 异步执行
- (void)asyncSerialTask { dispatch_queue_t queue = dispatch_queue_create("com.beckwang.queue", DISPATCH_QUEUE_SERIAL); NSLog(@"asyncSerialTask---start---"); dispatch_async(queue, ^{ NSLog(@"Task1---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"Task2---%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"Task3---%@", [NSThread currentThread]); }); NSLog(@"asyncSerialTask---end---"); }
打印结果:
2017-07-02 11:36:27.068 Test[6557:3008079 |