Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
在后台运行昂贵的网格计算-Objective-C_Objective C_Multithreading_Background Thread - Fatal编程技术网

在后台运行昂贵的网格计算-Objective-C

在后台运行昂贵的网格计算-Objective-C,objective-c,multithreading,background-thread,Objective C,Multithreading,Background Thread,我有一个NSMutableArray,它主要由iOS游戏中的主线程访问。每隔2-3秒,我需要在这个网格上执行一次昂贵的操作。我不需要修改网格。我只需要做一些计算并返回一个结果如何在后台线程中高效安全地使用网格? 到目前为止,我只考虑复制网格并将其作为performSelectorInBackground中的对象传递。然而,这似乎是潜在的浪费。我还考虑了从后台线程访问网格的引用,并确保在后台线程完成处理之前,主线程不会写入网格。然而,这感觉有风险,我不确定这是否是一种常见的做法。这取决于如果游戏无

我有一个
NSMutableArray
,它主要由iOS游戏中的主线程访问。每隔2-3秒,我需要在这个网格上执行一次昂贵的操作。我不需要修改网格。我只需要做一些计算并返回一个结果如何在后台线程中高效安全地使用网格?


到目前为止,我只考虑复制网格并将其作为
performSelectorInBackground
中的对象传递。然而,这似乎是潜在的浪费。我还考虑了从后台线程访问网格的引用,并确保在后台线程完成处理之前,主线程不会写入网格。然而,这感觉有风险,我不确定这是否是一种常见的做法。

这取决于如果游戏无法写入网格,它是否必须停止/减速。如果是这样,那么它就无法在后台运行它。如果游戏可以在不写入网格的情况下继续进行,那么这是最好的选择。只要您确保在后台处理完成之前不会写入,就不会有危险

如果游戏要慢下来,我会走复制路线


这两件事都可以在grid类中直接处理(如果您正在进行处理的话)。您可以使用一种方法“锁定”网格,并且可以让网格对象排队更改,直到处理完成。处理完成后,您可以循环执行所有操作并应用它们。这样,即使网格被锁定,一切都可以正常进行。

为什么(或者为什么一开始就删除了它)?我在那里给你的链接仍然适用:我认为这个问题更具体。此外,我还添加了到目前为止我考虑过的方法。在这种情况下,你应该编辑上一个问题,而不是删除它。如果你有足够的代表甚至可以编辑别人的帖子,你真的应该知道这一点。