处理多个数组中删除对象的最佳方法是什么?

时间:2012-08-29 01:20:54

标签: objective-c

我有一个类可以生成一堆随机类型的对象,并将它们(很好地引用它们)存储在一个数组中。在执行此操作时,它还会将对它们的引用存储在特定于其类型的数组中。

稍后,每个特定于类型的数组都会被迭代,其中的对象的x位置会递减。在该循环中,如果它们在屏幕上,则将它们添加到另一个可见对象数组中。一旦它们离开屏幕,它们就会从可见对象阵列中移除。

我的游戏规则是:一个物体只有在可见时才能被摧毁。因此,当尝试销毁一个对象时,它会搜索可见对象数组并尝试找到该对象,如果找到该对象,则将其删除。

问题是,一旦将对象从"可见阵列"中移除,"类型特定的"数组继续循环,所有这些对象的x位置都会递减 - 即使某个对象可能不再出现在屏幕上。

我想知道删除对象的所有引用的最佳方法是什么?我犹豫是否要通过所有数组并调用" removeObjectIdenticalTo"在他们身上...我的初步解决方案是只在我的对象中添加一个BOOL属性"销毁",如果它在屏幕上被销毁,则将其设置为YES,然后让我的x减少looop跳过已经被破坏的对象....但是我开始想知道,对于内存管理来说,这是不是最好的方法,因为该对象的持续时间比它需要的时间长......

应该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果你开始将所有对象存储在字典中,这可能会有效。接下来,向对象(正在传递的对象)添加一个属性,该对象包含与其所在阵列的字典键相同的NSString。

然后你所要做的就是:

NSMutable *array = [dicionary objectForKey:object.dictionaryKeyString];
//then remove the object from *array

答案 1 :(得分:0)

  

我对浏览所有数组并在其上调用“removeObjectIdenticalTo”犹豫不决

为什么呢?是因为你认为这是低效的吗?你怎么知道的?

但是,为了获得真正的效率,假设对象都是不同的对象,请使用NSSet,而不是NSArray。保证访问特定对象的效率。