美文网首页iOS Coding程序员iOS开发
GCD的一般使用(单例/多线程/2)

GCD的一般使用(单例/多线程/2)

作者: 渴wang | 来源:发表于2015-11-02 13:57 被阅读119次

    测试的时候可以将线程触发事件放在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的独立性
    
    

    相关文章

      网友评论

        本文标题:GCD的一般使用(单例/多线程/2)

        本文链接:https://www.haomeiwen.com/subject/ksdqhttx.html