gpt4 book ai didi

objective-c - 避免 "NSArray was mutated while being enumerated"

转载 作者:IT老高 更新时间:2023-10-28 11:39:49 44 4
gpt4 key购买 nike

我有一个 NSMutableArray 存储用于 Box2d 物理模拟的鼠标关节。当使用多个手指弹奏时,我会收到异常声明

NSArray was mutated while being enumerated

我知道这是因为我要从数组中删除对象,同时还要枚举它,从而使枚举无效。

我想知道的是,解决这个问题的最佳策略是什么?我在网上看到了一些解决方案:@synchronized,在枚举之前复制数组或将触摸关节放入垃圾数组以供以后删除(我不确定这是否可行,因为我需要将鼠标关节从世界中移除后立即从阵列中移除)。

最佳答案

您始终可以在没有枚举器的情况下进行迭代。这意味着一个常规的 for 循环,当您删除一个对象时:- 减少索引变量并 继续;。如果您在进入 for 循环之前缓存了数组的计数,请确保在删除对象时也减少该计数。

无论如何,我不明白为什么带有对象的数组会成为问题。我不知道您的确切情况和所涉及的技术,但理论上应该没有问题。因为在大多数情况下,使用此方法时,您可以在第一次枚举中什么都不做,而在枚举删除数组时做真正的工作。如果您遇到这样的情况,即在第一次枚举中,您正在针对同一个数组再次检查某些内容,并且您需要知道这些对象不再存在,您只需添加一个检查以查看它们是否存在在删除数组中。

无论如何,希望我有所帮助。祝你好运!

关于objective-c - 避免 "NSArray was mutated while being enumerated",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10157381/

44 4 0