GCD-dispatch_apply

先看代码

 

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

 

你可能感兴趣的:(Dispatch)