【问题标题】:Running expensive grid calculations in the background - Objective-C [duplicate]在后台运行昂贵的网格计算 - Objective-C [重复]
【发布时间】:2012-10-22 02:20:32
【问题描述】:

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

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

【问题讨论】:

  • 你为什么是reposting this(或者你为什么首先删除它)?我给你的链接仍然适用:Locking NSMutableArrayConcurrency Programming Guide
  • @JoshCaswell 我认为这个版本的问题更具体。我还添加了到目前为止我考虑过的方法。
  • 在这种情况下,您应该编辑之前的问题,而不是删除它。拥有足够的代表甚至可以编辑其他人的帖子,您真的应该知道这一点。

标签: objective-c multithreading background-thread


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2010-10-08
    • 2021-12-25
    相关资源
    最近更新 更多