GCD同步若干个异步调用
来源:互联网 发布:地暖品牌 知乎 编辑:程序博客网 时间:2024/05/17 05:06
应用场景
根据若干个url异步加载多张图片,然后在都下载完成后合成一张整图
原理
使用Dispatch Group追加block到Global Group Queue,这些block如果全部执行完毕,就会执行Main ,Dispatch Queue中的结束处理的block
实现
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, ^{ /*加载图片1 */ });dispatch_group_async(group, queue, ^{ /*加载图片2 */ });dispatch_group_async(group, queue, ^{ /*加载图片3 */ });dispatch_group_notify(group, dispatch_get_main_queue(), ^{ // 合并图片});
实例
// 用整除3,余数1,余数2,模拟图片加载,最终添加到总的数组模拟图片合成- (void)synchronizeGroupWithAsynchronousCall { __block NSMutableArray *mArray1, *mArray2, *mArray3, *array; 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, ^{ /*加载图片1 */ mArray1 = [NSMutableArray array]; for (int i = 0; i <= 30; i++) { if (i % 3 == 0) { printf("----%d\n", i); [mArray1 addObject:@(i)]; } } NSLog(@"----thread%@", [NSThread currentThread]); }); dispatch_group_async(group, queue, ^{ /*加载图片2 */ mArray2 = [NSMutableArray array]; for (int i = 0; i <= 30; i++) { if (i % 3 == 1) { printf("++++%d\n", i); [mArray2 addObject:@(i)]; } } NSLog(@"++++thread%@", [NSThread currentThread]); }); dispatch_group_async(group, queue, ^{ /*加载图片3 */ mArray3 = [NSMutableArray array]; for (int i = 0; i <= 30; i++) { if (i % 3 == 2) { printf("~~~~%d\n", i); [mArray3 addObject:@(i)]; } } NSLog(@"~~~~thread%@", [NSThread currentThread]); }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ // 合并图片 array = [NSMutableArray array]; [array addObjectsFromArray:mArray1]; [array addObjectsFromArray:mArray2]; [array addObjectsFromArray:mArray3]; for (NSNumber *num in array) { NSLog(@"num = %@", num); } NSLog(@"thread%@", [NSThread currentThread]); });// dispatch_group_notify(group, queue, ^{// // 如果这里还有基于上面两个任务的结果继续执行一些代码,建议还是放到子线程中,等代码执行完毕后在回到主线程// // // 回到主线程// dispatch_async(dispatch_get_main_queue(), ^{// // 执行相关代码...// });// });}
0 0
- GCD同步若干个异步调用
- iOS开发-如何用GCD同步若干个异步调用?
- gcd的同步异步
- GCD同步异步
- GCD 之 同步 异步 并发
- GCD同步异步测试DEMO
- GCD之异步同步体会
- 同步调用、异步调用
- 同步或异步调用多个exe文件样例
- 同步和异步调用
- ajax同步异步调用
- 异步调用同步返回
- 同步调用和异步调用
- 同步调用和异步调用
- 同步调用 回调 异步调用
- 同步调用与异步调用
- 同步调用与异步调用
- 同步调用,回调,异步调用
- 分分钟的碎碎念
- HBase Version
- PKU Campus 2014 B:An Easy Task(模拟)
- 第一篇、创建型设计模式——简单工厂模式(静态工厂方法模式)
- Tensorflow系列——conv2d的用法
- GCD同步若干个异步调用
- HBase删除
- 访问域名不需要加端口
- 【PAT】1099. Build A Binary Search Tree
- Chrome远程调试Andoird APP WebView
- AngularJS最理想开发工具WebStorm
- 数据库备份还原 quartz定时任务调度 自定义表单 java图片爬虫
- bcrypt使用报错-No callback function was given
- easyui tree 模仿ztree 使用扁平化加载json