iOS Coding程序员iOS开发

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之中的才会执行

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的独立性

上一篇下一篇

猜你喜欢

热点阅读