美文网首页
GCD学习 dispatch_apply

GCD学习 dispatch_apply

作者: 怎样m | 来源:发表于2017-07-07 14:02 被阅读9次

    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,但这样违背了我们想并行提高执行效率的初衷

    相关文章

      网友评论

          本文标题:GCD学习 dispatch_apply

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