`

GCD-dispatch_apply

    博客分类:
  • ios7
 
阅读更多

先看代码

 

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

 

分享到:
评论

相关推荐

    GCD常用和不常用API说明GCD-Demo-master.zip

    5. **dispatch_apply**:在并行队列上重复执行一个任务,适用于循环操作,可以自动并行化。 四、GCD_Demo-master.zip中的示例代码可能包含以下内容: - 通过`dispatch_queue_create`创建自定义队列并使用`dispatch...

    ios-dispatch的简单demo.zip

    这个名为"ios-dispatch的简单demo.zip"的压缩包文件包含了关于GCD中几个关键概念的示例代码,即`dispatch_apply`、`dispatch_group`、`dispatch_barrier`和`dispatch_source`。接下来,我们将深入探讨这些概念及其在...

    ios-dispatch的简单demo_.zip

    在iOS开发中, Dispatch(也称为GCD,Grand Central Dispatch)是Apple提供的多线程和并发处理技术。这个“ios-dispatch的简单demo_.zip”压缩包文件包含了一个关于Dispatch学习的实例,主要涵盖了`apply`、`source`...

    多线程GCD的使用

    iOS多线程编程之Grand Central Dispatch(GCD)使用,具有1、常用的方法dispatch_async 2、dispatch_group_async 3、dispatch_barrier_async 4、dispatch_apply的用法

    iOS进阶1

    - GCD:Grand Central Dispatch,提供了一种更高效的方式来管理线程。`dispatch_barrier_async`保证了在前面任务完成后执行自身,且其后续任务等待其完成。全局并发队列可通过`dispatch_get_global_queue`获取,`...

    IOS并发编程指南

    `DispatchQueue` 是 Grand Central Dispatch (GCD) 中的核心概念之一。它是一种轻量级、高效的并发机制,用于管理和调度任务(通常是块 Block)。根据队列的不同类型,可以将任务安排为并行或串行执行。 - **并行...

    Do:[不推荐使用] [Swift]一种处理GCD相关内容的Swift-er方法

    (具有范围版本的死锁安全dispatch_apply ) 之后(可取消dispatch_after ) 并发(异步操作的简单机制,可同时处理的数量受到限制) 一次(启用黑客的简洁dispatch_once ) 节气门(启用了骇客功能的简洁节流...

    Concurrent Programming in Mac OS X and iOS

    3. **调用方式**:块对象可以通过直接在其后添加括号来调用,或者通过`dispatch_apply`、`dispatch_async`等函数将其提交给并行执行环境。 4. **内存管理**:块对象的生命周期由引用计数管理。当没有引用指向块时,...

    iOS中遍历的方法总结

    使用GCD的`dispatch_apply`函数,可以在并发或串行队列上执行指定次数的任务。对于遍历,这相当于一个同步的for循环: ```objc dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_...

    顺丰科技2019秋招iOS开发工程师、GIS开发工程师客观题合集.docx

    `dispatch_apply`用于同步执行任务,并等待所有任务完成。 以上解析涵盖了顺丰科技2019年秋季招聘iOS开发工程师和GIS开发工程师的相关知识点,涉及Spring MVC框架、Objective-C语言特性、递归算法、Java中的静态...

    Picture图片美化

    同时,考虑到用户可能处理大量的图片,优化图片加载和处理流程至关重要,可以使用异步处理技术,如AsyncTask或GCD(Grand Central Dispatch),避免阻塞主线程。 总的来说,"Picture图片美化"项目通过camera360SDK...

Global site tag (gtag.js) - Google Analytics