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)
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)
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)
或者也许是NSBlockOperation
s或者某种东西NSOperationQueue
?
蒂娜,亚历克斯.
bbu*_*bum 44
说真的 - 除非你有一个可测量的性能问题,这个特殊的选择不应该占用你的时间而不是回答这些模式中哪一个最适合我的项目风格?
注意:通过从串行执行到并发执行来解决性能问题通常会导致两个问题; 性能和并发性.
归档时间: |
|
查看次数: |
7855 次 |
最近记录: |