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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • dispathc_apply 是dispatch_sync 和dispatch_group的关联API.它以指定的...
    魏雷123阅读 1,819评论 0 0
  • 同步/异步 同步:多个任务情况下,一个任务A执行结束,才可以执行另一个任务B。只存在一个线程也就是主线程。 异步:...
    XLsn0w阅读 2,444评论 0 0
  • 目录(GCD): 关键词 混淆点 场景应用 总结 1. 关键词 线程概念: 独立执行的代码段,一个线程同时间只能执...
    Ryan___阅读 5,071评论 0 3
  • 濮陽位於三省交會之處,歷史上有幾次大規模移民,各省文化融合匯集於此,造就美食薈萃,美味包羅萬象,形成濮陽的獨樹一幟...
    輕醒阅读 3,957评论 2 5
  • 10.12版本可以系统偏好设置安全性之前输入密码勾选但是10.12版本之后系统就把这个选项隐藏了,但是我们可以在终...
    f2efa87f6528阅读 11,019评论 0 0

友情链接更多精彩内容