GCD的一般使用(单例/多线程/2)
2015-11-02 本文已影响119人
渴wang
测试的时候可以将线程触发事件放在Button中
// 延迟时间
- (IBAction)didClickAfterButton:(id)sender {
设置线程触发时间(5秒后运行)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (ino64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"等我5秒");
});
}
点击延迟按钮,控制台出现如下效果:
** 等我5秒**
// 重复执行
- (IBAction)didClickApplyButton:(id)sender {
// 重复10次,触发该线程
dispatch_apply(10, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t t) {
NSLog(@"重复十次, 第%zu次", t);
});
}```
点击重复执行按钮,控制台效果:
**重复十次, 第0次
重复十次, 第4次
重复十次, 第1次
重复十次, 第3次
重复十次, 第5次
重复十次, 第2次
重复十次, 第7次
重复十次, 第6次
重复十次, 第8次
重复十次, 第9次**
// 当一个分组执行结束, notify之中的才会执行
-
(IBAction)didClickNotifyButton:(id)sender {
// 创建分组标签
dispatch_group_t groupA = dispatch_group_create();// 使用分组
// 创建队列
dispatch_queue_t myQueue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT); // 表示并发执行
dispatch_group_async(groupA, myQueue, ^{
[self printNumber:@"groupA"];
});
dispatch_group_async(groupA, myQueue, ^{
[self printNumber:@"groupAA"];
});
// notify
dispatch_group_notify(groupA, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"groupA的都执行完以后, 我才执行");
});
}```
点击nogify按钮之后当分组groupA中的程序执行完之后nogify才执行
Barrier用法
- (IBAction)didClickBarrierButton:(id)sender {
// 使用分组
// 创建队列
dispatch_queue_t myQueue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(myQueue, ^{
[self printNumber:@"groupA"];
});
dispatch_async(myQueue, ^{
[self printNumber:@"groupB"];
});
dispatch_async(myQueue, ^{
[self printNumber:@"opC"];
});
// Barrier
dispatch_barrier_async(myQueue, ^{
[self printNumber:@"当我执行时,没人能和我抢"];
});
}```
上述代码控制台显示结果可以看出:并发执行中Barrier的代码单独自己执行显示了Barrier的独立性