objective-c – 避免“NSArray被枚举时突变”

objective-c – 避免“NSArray被枚举时突变”,第1张

概述我有一个NSMutableArray存储鼠标点的Box2d物理模拟。当使用多个手指玩时,我会得到异常说明 NSArray was mutated while being enumerated 我知道这是因为我从数组删除对象,同时枚举通过它,使枚举无效。 我想知道的是什么是最好的策略来解决这个前进?我已经在线看到了一些解决方案:@synchronized,复制数组之前枚举或将接头放入一个垃圾数组,以 我有一个NSMutableArray存储鼠标点的Box2d物理模拟。当使用多个手指玩时,我会得到异常说明

NSArray was mutated while being enumerated

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

我想知道的是什么是最好的策略来解决这个前进?我已经在线看到了一些解决方案:@synchronized,复制数组之前枚举或将接头放入一个垃圾数组,以备以后删除(我不知道会工作,因为我需要从数组直接删除鼠标点从世界中删除后)。

解决方法@H_404_21@ 您可以随时迭代没有枚举器。
这意味着一个常规的for循环,当你删除一个对象: – 递减索引变量并继续。
如果你在进入for循环之前缓存数组的计数,那么确保在删除对象时减少它。

无论如何,我不明白为什么一个对象数组,以后的删除将是一个问题。我不知道你所拥有的确切情况和涉及的技术,但理论上应该不会有问题。
因为在大多数情况下使用这种方法,你可以在第一次枚举中不做任何事情,并在枚举删除数组时做真正的工作。
如果你有一种情况,在第一个枚举中你正在检查的东西再次对同一个数组,你需要知道对象不再有,你可以只是添加一个检查,看看他们是否在删除数组。

反正,希望我帮助。祝你好运!

总结

以上是内存溢出为你收集整理的objective-c – 避免“NSArray被枚举时突变”全部内容,希望文章能够帮你解决objective-c – 避免“NSArray被枚举时突变”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1044605.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存