目标C - 枚举数组的最快和最有效的方法是什么?

Ale*_*ers 26 arrays enumeration objective-c grand-central-dispatch objective-c-blocks

编辑

我阅读了一些关于块和快速枚举以及GCD等的文章.@Bbum,他写了许多关于GCD和块主题的文章,他说块枚举方法总是比快速枚举方法快或快.你可以在这里阅读他的推理.

虽然这是一次引人入胜的智力对话,但我同意那些说它确实取决于手头任务的人.


我有一些任务需要完成,我需要快速,便宜,高效地完成这些任务.Apple为我们想要枚举数组的方式提供了很多选择,但我不确定选择哪个.

快速枚举

for (id obj in array)
{
    /* Do something with |obj|. */
}
Run Code Online (Sandbox Code Playgroud)

非并发块枚举

[array enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop) {
    /* Do something with |obj|. */
}];
Run Code Online (Sandbox Code Playgroud)

并发块枚举

[array enumerateObjectsWithOptions: NSEnumerationConcurrent usingBlock: ^(id obj, NSUInteger idx, BOOL *stop) {
    /* Do something with |obj|. */
}];
Run Code Online (Sandbox Code Playgroud)

GCD申请

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_apply([array count], queue, ^(size_t idx) {
    id obj = [array objectAtIndex: idx];
    /* Do something with |obj|. */
});
Run Code Online (Sandbox Code Playgroud)

GCD异步申请

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(queue, ^(void) {
    dispatch_apply([array count], queue, ^(size_t idx) {
        id obj = [array objectAtIndex: idx];
        /* Do something with |obj|. */
    });
});
Run Code Online (Sandbox Code Playgroud)

或者也许是NSBlockOperations或者某种东西NSOperationQueue

蒂娜,亚历克斯.

bbu*_*bum 44

最快的代码是首先进入市场的代码.

说真的 - 除非你有一个可测量的性能问题,这个特殊的选择不应该占用你的时间而不是回答这些模式中哪一个最适合我的项目风格?

注意:通过从串行执行到并发执行来解决性能问题通常会导致两个问题; 性能和并发性.