2

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

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

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

问题是,一旦从“可见数组”中删除了对象,“类型特定”数组将继续循环,所有这些对象的 x 位置都会递减——即使一个对象可能不再出现在屏幕上.

我想知道删除对对象的所有引用的最佳方法是什么?我犹豫要不要遍历所有数组并在它们上调用“removeObjectIdenticalTo”......我最初的解决方案是向我的对象“销毁”添加一个 BOOL 属性,如果它在屏幕上被销毁,则将其设置为 YES,并且然后让我的 x 递减循环跳过已被破坏的对象......但我开始想知道这是否不是内存管理的最佳方法,因为该对象的停留时间超过了它需要的时间......

应该如何处理?

4

2 回答 2

0

如果您从将所有对象存储在字典中开始,这可能会起作用。之后,向对象(正在传递的)添加一个属性,该属性包含一个与它所在数组的字典键相同的 NSString。

那么你所要做的就是:

NSMutable *array = [dicionary objectForKey:object.dictionaryKeyString];
//then remove the object from *array
于 2012-08-29T01:26:15.643 回答
0

我犹豫要不要遍历所有数组并在它们上调用“removeObjectIdenticalTo”

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

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

于 2012-08-29T01:28:20.237 回答