Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何并行处理数组_Iphone_Cocoa - Fatal编程技术网

Iphone 如何并行处理数组

Iphone 如何并行处理数组,iphone,cocoa,Iphone,Cocoa,因此,有许多方法可以通过选择器或代码块来运行数组的所有元素makeObjectsPerformSelector:等 如果您手头有4或16个内核,那么您可能希望将所有处理发送到不同的进程 即使在iOS上,也可以明智地将它们全部送走,或者至少让它们随风而去 在可可环境中,什么是最好、最整洁的方法 同样,如果您希望在任何时候发送它们以完成,即执行以下指令之前不要等待枚举完成,…?如果您可以针对iOS 4+或Mac OS X 10.6+,请使用Grand Central Dispatch(我使用一个类别

因此,有许多方法可以通过选择器或代码块来运行数组的所有元素<代码>makeObjectsPerformSelector:等

如果您手头有4或16个内核,那么您可能希望将所有处理发送到不同的进程

即使在iOS上,也可以明智地将它们全部送走,或者至少让它们随风而去

在可可环境中,什么是最好、最整洁的方法


同样,如果您希望在任何时候发送它们以完成,即执行以下指令之前不要等待枚举完成,
…?

如果您可以针对iOS 4+或Mac OS X 10.6+,请使用Grand Central Dispatch(我使用一个类别,因为我认为它们很酷):


如果需要并发和同步行为(即,在执行以下指令之前等待枚举完成),
-[NSArray enumerateObjectsWithOptions:usingBlock://code>将在传递
NSEnumerationConcurrent
选项时执行此操作。此方法在Mac OS 10.6+和iOS 4.0+上可用

如果需要异步行为,可以使用标准多线程解决方案之一,如NSOperation或GCD,并结合
-EnumerateObjectsWithoOptions:usingBlock:
。比如说,

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    [array enumerateObjectsWithOptions:NSEnumerationConcurrent
        usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            // do something with obj
        }];
    });

@Joe我昨天回答了:)@Joe
0,0
用于获取默认优先级的全局队列(
0
),第二个参数始终为0(因为文档这么说)。如果你在变量
myBlock
中有一个块,你可以这样调用它:
myBlock()
戴夫·德隆的类别比枚举对象使用block有什么好处:?@bavariage我忘了:)@Jon nope。这就是中央大调度的全部要点。它在全局线程上排队,它们在执行时执行。该选项的全部要点是将工作分散到可用的核心上。它还能做什么呢?该方法在内部使用GCD,但它会进行一些批处理以避免不必要的开销。我建议您在运行自己的程序之前先尝试一下。@Joe Blow:您可以使用任何常用的多线程解决方案,如NSOperation或GCD。例如,您可以GCD异步分派一个块,该块将
-EnumerateObjectsWithoOptions:usingBlock:
发送到数组。@Joe Blow:是的,Dave的代码分派块以进行异步执行。阵列上的迭代是同步的,尽管它只会对大型阵列产生显著的影响。@Joe-如果您想进行实验,我为我的课程创建了一个简单的测试应用程序,演示Dave和(BaVariable)方法的变体:。查看MATCGCD.m文件,在该文件中,可以使用注释打开和关闭这两种方法。对于受计算限制的任务,它们实际上是相同的(在后台分派,立即返回,并行处理数组中的项)。使用此示例,您可以观察任务是如何实时执行的。
[myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL * stop) {
  dispatch_async(dispatch_get_global_queue(0,0), ^{
    [obj performSelector:@selector(doFoo)];
  };
}];
dispatch_async(dispatch_get_global_queue(0, 0), ^{
    [array enumerateObjectsWithOptions:NSEnumerationConcurrent
        usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            // do something with obj
        }];
    });