Objective C — 枚举数组的最快、最有效的方法是什么?
Objective C — 枚举数组的最快、最有效的方法是什么?
编辑
我阅读了一些关于块和快速枚举和GCD等方面的文章。 @Bbum,曾经写过很多关于GCD和块的文章,他说块枚举方法始终比快速枚举等效方法更快。你可以在这里阅读他的理由。
虽然这是一场引人入胜的知识交流,但我同意那些认为它实际上取决于手头的任务的人。
我有一些任务需要完成,并且需要快速、便宜和高效地完成它们。苹果给了我们很多选项来枚举数组,但我不确定应该选择哪个。
快速枚举
for (id obj in array) { /* Do something with |obj|. */ }
非并发块枚举
[array enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop) { /* Do something with |obj|. */ }];
并发块枚举
[array enumerateObjectsWithOptions: NSEnumerationConcurrent usingBlock: ^(id obj, NSUInteger idx, BOOL *stop) { /* Do something with |obj|. */ }];
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|. */ });
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|. */ }); });
或者也许可以使用NSBlockOperation
或者NSOperationQueue
?
谢谢,Alex。
admin 更改状态以发布 2023年5月21日