我有一个NSMutableArray,它主要由我的iOS游戏的主线程访问。每2-3秒我需要在这个网格上执行一个昂贵的操作。我不需要修改网格。我只需要做一些计算,并返回一个结果。如何在后台线程中高效、安全地使用网格?
到目前为止,我已经考虑过复制网格并将其作为performSelectorInBackground中的对象传递。然而,这似乎是潜在的浪费。我还考虑过从后台线程访问网格的引用,并确保主线程在后台线程完成处理之前不会写入网格。然而,这感觉很危险,我不确定这是否是一种常见的做法。
发布于 2012-10-22 02:34:10
这完全取决于游戏是否必须停止/慢下来,如果它不能写入网格。如果是的话,那么它就违背了在后台运行它的目的。如果游戏可以继续良好,而不写到网格,那么这是最好的选择。只要您确保它在后台处理完成后才会写,这并不危险。
如果游戏要慢下来,那么我就走复制路线。
这两件事都可以在网格类中直接处理(如果这是您要处理的地方)。您可以有一种“锁定”网格的方法,并且可以让网格对象队列进行更改,直到处理完成为止。当处理完成后,您可以遍历所有操作并应用它们。这样,即使网格被锁定,一切都可以继续正常进行。
https://stackoverflow.com/questions/13004253
复制相似问题