美文网首页iOS 小册iOS Developer
GCD 之快速迭代(dispatch_apply)

GCD 之快速迭代(dispatch_apply)

作者: fuyoufang | 来源:发表于2016-12-01 23:51 被阅读130次

dispatch_apply 快速迭代

类似 for 循环,但是在并发队列的情况下 dispatch_apply 会并发执行 block 任务。因为可以并行执行,所以使用 dispatch_apply 运行地更快。需要注意的是,dispatch_apply 这个是会阻塞主线程的。

在主线程上调用 dispatch_apply 方法:

  • object-c
NSLog(@"begin");
dispatch_queue_t asyncQueue = dispatch_queue_create("asdf", DISPATCH_QUEUE_CONCURRENT);
dispatch_apply(3, asyncQueue, ^(size_t index) {
    NSLog(@"%zu", index);
});
NSLog(@"end");
  • swift 3.0
print("begin")
DispatchQueue.concurrentPerform(iterations: 3, execute: {
    index in
    print(index)
})
print("end")

输出:

begin
0
1
2
end

如果在 for 循环中使用 dispatch_async, 需要管理好线程的数量,否则会发生线程爆炸或死锁。而 dispatch_apply 是由 GCD 会管理并发的,可以碧避免上述情况发生。

dispatch_queue_t concurrentQueue = dispatch_queue_create("com.starming.gcddemo.concurrentqueue",DISPATCH_QUEUE_CONCURRENT);
//有问题的情况,可能会死锁
for (int i = 0; i < 999 ; i++) {
    dispatch_async(concurrentQueue, ^{
        NSLog(@"wrong %d",i);
        //do something hard
    });
}
//会优化很多,能够利用GCD管理
dispatch_apply(999, concurrentQueue, ^(size_t i){
    NSLog(@"correct %zu",i);
    //do something hard
});

相关文章

  • GCD

    GCD之dispatch_apply dispatch_apply的作用是快速迭代 dispatch_apply替...

  • GCD相关方法

    1.gcd栅栏函数 2.gcd快速迭代方法(dispatch_apply)同for循环做比较。 案例:将文件夹fr...

  • GCD 之快速迭代(dispatch_apply)

    dispatch_apply 快速迭代 类似 for 循环,但是在并发队列的情况下 dispatch_apply ...

  • GCD 快速迭代 dispatch_apply

    dispatch_apply函数通常在并发队列中使用。 控制台输出: 这个函数真正使用场景暂时还没有遇到,暂时先搁...

  • GCD 队列组 常用函数

    队列组 GCD : dispatch_barrier_async GCD : dispatch_apply G...

  • GCD快速迭代

    普通for循环遍历数据 使用for循环遍历数据,是同步的, 串行的 GCD快速迭代: 开子线程和主线程一起完成遍历...

  • GCD之dispatch_apply

    dispatch_apply该函数按指定的次数将指定的block追加到指定的dispatch queue中,并等待...

  • iOS面试--GCD常见用法

    项目中常见的GCD用法有已下几种: 1.GCD栅栏函数2.GCD快速迭代(遍历)3.GCD队列组的使用 1.GCD...

  • GCD学习(七) dispatch_apply

    GCD学习(七) dispatch_apply dispathc_apply 是dispatch_sync 和di...

  • GCD-快速迭代

    /* 第一个参数:遍历的次数 第二个参数:队列(要使用并发队列,主队列会发生死锁,串行队列将无效果) ...

网友评论

    本文标题:GCD 之快速迭代(dispatch_apply)

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