先看代码
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); NSMutableArray *arry = [[NSMutableArray alloc]init]; for (int i = 0;i != 10; ++i) { [arry addObject:[NSString stringWithFormat:@"%d",i]]; } dispatch_apply(arry.count, queue, ^(size_t index) { NSLog(@"%zu:%@",index,[arry objectAtIndex:index]); }); NSLog(@"done")
执行结果
2014-01-01 11:37:32.362 GCDDemo[2514:70b] 1:1 2014-01-01 11:37:32.365 GCDDemo[2514:70b] 4:4 2014-01-01 11:37:32.362 GCDDemo[2514:1303] 0:0 2014-01-01 11:37:32.365 GCDDemo[2514:70b] 5:5 2014-01-01 11:37:32.366 GCDDemo[2514:1303] 6:6 2014-01-01 11:37:32.362 GCDDemo[2514:3703] 3:3 2014-01-01 11:37:32.366 GCDDemo[2514:70b] 7:7 2014-01-01 11:37:32.366 GCDDemo[2514:1303] 8:8 2014-01-01 11:37:32.362 GCDDemo[2514:3603] 2:2 2014-01-01 11:37:32.366 GCDDemo[2514:3703] 9:9 2014-01-01 11:37:32.367 GCDDemo[2514:70b] done
解释:第一个参数是重复次数,第二个参数为追加的对象,第三个参数为追加的处理。dispatch_apply会等待处理结束,所以done肯定再最后输出。这样我们可以简单的处理NSArray中的对象。
建议。
在dispatch_async中非同步执行diapatch_apply
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ NSMutableArray *arry = [[NSMutableArray alloc]init]; for (int i = 0;i != 10; ++i) { [arry addObject:[NSString stringWithFormat:@"%d",i]]; } dispatch_apply(arry.count, queue, ^(size_t index) { NSLog(@"%zu:%@",index,[arry objectAtIndex:index]); }); dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"done"); }); });
执行结果
2014-01-01 11:50:29.215 GCDDemo[2535:3603] 1:1 2014-01-01 11:50:29.216 GCDDemo[2535:3803] 2:2 2014-01-01 11:50:29.216 GCDDemo[2535:3703] 3:3 2014-01-01 11:50:29.215 GCDDemo[2535:1303] 0:0 2014-01-01 11:50:29.218 GCDDemo[2535:3703] 6:6 2014-01-01 11:50:29.218 GCDDemo[2535:3603] 4:4 2014-01-01 11:50:29.218 GCDDemo[2535:1303] 7:7 2014-01-01 11:50:29.218 GCDDemo[2535:3803] 5:5 2014-01-01 11:50:29.221 GCDDemo[2535:3703] 8:8 2014-01-01 11:50:29.221 GCDDemo[2535:3603] 9:9 2014-01-01 11:50:29.223 GCDDemo[2535:70b] done
相关推荐
5. **dispatch_apply**:在并行队列上重复执行一个任务,适用于循环操作,可以自动并行化。 四、GCD_Demo-master.zip中的示例代码可能包含以下内容: - 通过`dispatch_queue_create`创建自定义队列并使用`dispatch...
这个名为"ios-dispatch的简单demo.zip"的压缩包文件包含了关于GCD中几个关键概念的示例代码,即`dispatch_apply`、`dispatch_group`、`dispatch_barrier`和`dispatch_source`。接下来,我们将深入探讨这些概念及其在...
在iOS开发中, Dispatch(也称为GCD,Grand Central Dispatch)是Apple提供的多线程和并发处理技术。这个“ios-dispatch的简单demo_.zip”压缩包文件包含了一个关于Dispatch学习的实例,主要涵盖了`apply`、`source`...
iOS多线程编程之Grand Central Dispatch(GCD)使用,具有1、常用的方法dispatch_async 2、dispatch_group_async 3、dispatch_barrier_async 4、dispatch_apply的用法
- GCD:Grand Central Dispatch,提供了一种更高效的方式来管理线程。`dispatch_barrier_async`保证了在前面任务完成后执行自身,且其后续任务等待其完成。全局并发队列可通过`dispatch_get_global_queue`获取,`...
`DispatchQueue` 是 Grand Central Dispatch (GCD) 中的核心概念之一。它是一种轻量级、高效的并发机制,用于管理和调度任务(通常是块 Block)。根据队列的不同类型,可以将任务安排为并行或串行执行。 - **并行...
(具有范围版本的死锁安全dispatch_apply ) 之后(可取消dispatch_after ) 并发(异步操作的简单机制,可同时处理的数量受到限制) 一次(启用黑客的简洁dispatch_once ) 节气门(启用了骇客功能的简洁节流...
3. **调用方式**:块对象可以通过直接在其后添加括号来调用,或者通过`dispatch_apply`、`dispatch_async`等函数将其提交给并行执行环境。 4. **内存管理**:块对象的生命周期由引用计数管理。当没有引用指向块时,...
使用GCD的`dispatch_apply`函数,可以在并发或串行队列上执行指定次数的任务。对于遍历,这相当于一个同步的for循环: ```objc dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_...
`dispatch_apply`用于同步执行任务,并等待所有任务完成。 以上解析涵盖了顺丰科技2019年秋季招聘iOS开发工程师和GIS开发工程师的相关知识点,涉及Spring MVC框架、Objective-C语言特性、递归算法、Java中的静态...
同时,考虑到用户可能处理大量的图片,优化图片加载和处理流程至关重要,可以使用异步处理技术,如AsyncTask或GCD(Grand Central Dispatch),避免阻塞主线程。 总的来说,"Picture图片美化"项目通过camera360SDK...