iOS GCD

作者: CaptainRoy | 来源:发表于2018-11-06 14:38 被阅读1次
参考链接 https://www.jianshu.com/p/d2622748c249
串行队列 (依次执行)
dispatch_queue_t queue = dispatch_queue_create("serialDispatchQueue", NULL);
    dispatch_async(queue, ^{
        NSLog(@"queue1");
    });
    dispatch_async(queue, ^{
        NSLog(@"queue2");
    });
    dispatch_async(queue, ^{
        NSLog(@"queue3");
    });
主线程执行
dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@"主线程");
    });
并行队列
dispatch_queue_t queue = dispatch_queue_create("currentDispatchQueue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
        NSLog(@"queue1");
    });
    dispatch_async(queue, ^{
        NSLog(@"queue2");
    });
    dispatch_async(queue, ^{
        NSLog(@"queue3");
    });
    dispatch_async(queue, ^{
        NSLog(@"queue4");
    });
在同步线程完成之后执行某操作(比如刷新UI)
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_group_t group = dispatch_group_create();
    dispatch_group_async(group, queue, ^{
        NSLog(@"queue1");
    });
    dispatch_group_async(group, queue, ^{
        NSLog(@"queue2");
    });
    dispatch_group_async(group, queue, ^{
        NSLog(@"queue3");
    });
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"全部队列完成");
    });
到某一步不能同步执行,必须要执行完之后才能再次同步
dispatch_queue_t queue = dispatch_queue_create("myCurrentQueue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
        NSLog(@"读取操作1");
    });
    dispatch_async(queue, ^{
        NSLog(@"读取操作2");
    });
    dispatch_async(queue, ^{
        NSLog(@"读取操作3");
    });
    dispatch_barrier_async(queue, ^{
        NSLog(@"执行写入操作");
    });
    dispatch_async(queue, ^{
        NSLog(@"读取操作4");
    });
    dispatch_async(queue, ^{
        NSLog(@"读取操作5");
    });
    dispatch_async(queue, ^{
        NSLog(@"读取操作6");
    });

相关文章

网友评论

      本文标题:iOS GCD

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