zoukankan      html  css  js  c++  java
  • GCD学习(七) dispatch_apply

    dispathc_apply 是dispatch_sync 和dispatch_group的关联API.它以指定的次数将指定的Block加入到指定的队列中。并等待队列中操作全部完成.

        NSArray *array = [NSArray arrayWithObjects:@"/Users/chentao/Desktop/copy_res/gelato.ds",
                          @"/Users/chentao/Desktop/copy_res/jason.ds",
                          @"/Users/chentao/Desktop/copy_res/jikejunyi.ds",
                          @"/Users/chentao/Desktop/copy_res/molly.ds",
                          @"/Users/chentao/Desktop/copy_res/zhangdachuan.ds",
                          nil];
        NSString *copyDes = @"/Users/chentao/Desktop/copy_des";
        NSFileManager *fileManager = [NSFileManager defaultManager];
        dispatch_async(dispatch_get_global_queue(0, 0), ^(){
            dispatch_apply([array count], dispatch_get_global_queue(0, 0), ^(size_t index){
                NSLog(@"copy-%ld", index);
                NSString *sourcePath = [array objectAtIndex:index];
                NSString *desPath = [NSString stringWithFormat:@"%@/%@", copyDes, [sourcePath lastPathComponent]];
                [fileManager copyItemAtPath:sourcePath toPath:desPath error:nil];
            });
            NSLog(@"done");
        });

    输出 copy-index 顺序不确定,因为它是并行执行的(dispatch_get_global_queue是并行队列),但是done是在以上拷贝操作完成后才会执行,因此,它一般都是放在dispatch_async里面(异步)。实际上,这里 dispatch_apply如果换成串行队列上,则会依次输出index,但这样违背了我们想并行提高执行效率的初衷。

  • 相关阅读:
    2019.5.28
    蓝桥杯2017Java B组---分巧克力and承压计算
    看似忙碌的背后我都干了点什么
    3.9个人总结
    3.2个人总结
    2.23个人总结
    2.16个人总结
    2019.01.27个人总结
    1.19个人总结
    12.22个人总结
  • 原文地址:https://www.cnblogs.com/zhidao-chen/p/3599052.html
Copyright © 2011-2022 走看看