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

时间:2012-10-22 02:20:32

标签: objective-c multithreading background-thread

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

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

1 个答案:

答案 0 :(得分:0)

这一切都取决于如果游戏无法写入网格,是否必须停止/减速。如果确实如此,那么它就无法在后台运行它。如果游戏可以继续正常而无需写入网格,那么这是最好的选择。只要你确保在后台处理完成之前它不会写入它就没有危险。

如果游戏速度减慢,那么我会去复制路线。

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