
谢谢,
编辑:只是为了澄清 – 我一直在寻找最好的方式,例如。比我手动更新索引更优雅。例如在C我可以做;
iterator it = someList.begin();while (it != someList.end()){ if (shouldRemove(it)) it = someList.erase(it);}解决方法 为了清楚起见,我喜欢做一个初始循环,我收集要删除的项目。然后我删除它们。下面是一个使用Objective-C 2.0语法的示例: NSMutableArray *discardedItems = [NSMutableArray array];SomeObjectClass *item;for (item in originalArrayOfItems) { if ([item shouldBediscarded]) [discardedItems addobject:item];}[originalArrayOfItems removeObjectsInArray:discardedItems]; 然后,不存在索引是否正确更新,或其他小簿记细节的问题。
已编辑以添加:
在其他答案中已经注意到,逆公式应该更快。即如果你遍历数组并组成一个新的要保留的对象数组,而不是丢弃对象。这可能是真的(虽然如何分配一个新的数组的内存和处理成本,并放弃旧的数组?),但即使它更快,它可能不会像一个朴素的实现一样大,因为NSArrays不像“正常”数组。他们谈论谈话,但他们走不同的步行。在这里看到一个很好的分析:
http://ridiculousfish.com/blog/archives/2005/12/23/array/
逆公式可能更快,但我从来不需要关心它是否,因为上述公式总是足够快,我的需要。
对我来说,回家的消息是使用任何配方是最清楚的。仅在必要时进行优化。我个人认为上述配方最清晰,这就是为什么我使用它。但是如果逆公式对你更清楚,去吧。
总结以上是内存溢出为你收集整理的objective-c – 在迭代时从NSMutableArray中删除的最佳方法?全部内容,希望文章能够帮你解决objective-c – 在迭代时从NSMutableArray中删除的最佳方法?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)