目标C —枚举数组的最快,最有效的方法是什么?
|
编辑
我通读了一些有关块和快速枚举以及GCD等的文章。 @Bbum写了许多有关GCD和块的文章,他说块枚举方法总是比快速枚举等效方法快或快。您可以在这里阅读他的推理。
虽然这是一次有趣的,理性的对话,但我同意那些人的话,这实际上取决于当前的任务。
我有一些任务需要完成,我需要快速,廉价和高效地完成它们。 Apple为我们要枚举数组的方式提供了许多选择,但我不确定该选择哪个。
快速枚举
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|. */
});
});
或者也许是5英镑或6英镑的东西?
TIA,Alex。
没有找到相关结果
已邀请:
3 个回复
揽芳僵迷仇
杭难插
妒垮
尽管它确实在一定程度上取决于手头的任务,并且运输软件是最重要的,但是绝对肯定有简便的方法,可以防止将来在应用程序开始扩展时将性能问题作为技术债务问题而出现。例如,您可能会有很大的网络获取结果。根据此结果,您可能必须迭代获取的对象并更新某些模型或模型系列(不是Core Data模型,因为Core Data不是线程安全的!必须采取其他措施才能在多个线程上使用Core Data。如果您正在考虑从多线程方案中处理核心数据,那么您将需要研究一个很深的主题)。考虑到您没有对UI进行更新(这不是您不希望在主线程上执行的操作),因此可以使用此方法来充分利用设备的硬件。它不会一次只使用一个内核的for循环,而是会充分利用并行的可用内核,因此提高了性能,并有可能使执行时间减半。如果不考虑要枚举的数组和在该块内执行的任务,这不是您要做的事情,但是如果谨慎使用,它对于多种情况很有用。