2012-08-29 3 views
2

J'ai une classe qui génère un tas d'objets de types aléatoires et les stocke (bien-références à eux) dans un tableau. En faisant ceci, il stocke également des références à eux dans un tableau spécifique à leur type.Quelle est la meilleure façon de traiter la suppression d'objets dans plusieurs tableaux?

Par la suite, chaque tableau spécifique au type est itéré et les objets dans lesquels ils se trouvent ont leur position x décrémentée. Dans cette boucle, s'ils sont à l'écran, ils sont ajoutés à un autre tableau d'objets visibles. Une fois qu'ils disparaissent de l'écran, ils sont supprimés de ce tableau d'objets visibles.

La règle de mon jeu est la suivante: un objet ne peut être détruit que lorsqu'il est visible. Ainsi, lorsqu'une tentative de destruction d'un objet est effectuée, il recherche le tableau d'objets visibles et tente de localiser l'objet, s'il est trouvé, il est supprimé. Le problème est que, une fois que l'objet a été retiré du "tableau visible", le tableau "spécifique au type" continue à être bouclé et tous ces objets obtiennent leur position x décrémentée - même si un objet peut ne pas plus sur l'écran.

Je me demande quelle est la meilleure façon de supprimer toutes les références à l'objet? J'hésitais à parcourir tous les tableaux et j'appelais "removeObjectIdenticalTo" sur eux ... Ma première solution consistait simplement à ajouter une propriété BOOL à mon objet "destroyed", et à l'initialiser YES si elle avait été détruite à l'écran, et alors j'ai mes x décrémentant sauter les objets qui ont été détruits .... Mais j'ai commencé à me demander si ce n'est pas la meilleure approche en ce qui concerne la gestion de la mémoire puisque cet objet reste plus longtemps que nécessaire ......

Comment faire face à cela?

+1

Peut-être que cela vous aiderait si vous ajoutez du code indiquant ce que vous essayez de faire? –

Répondre

0

Cela peut fonctionner si vous avez commencé par stocker tous les objets dans un dictionnaire. À la suite de cela, ajoutez une propriété aux objets (qui sont passé autour) qui contient une NSString identique à la clé de dictionnaire pour le tableau qu'il vit dans

Alors tout ce que vous avez à faire est la suivante:.

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

Je hésitait à passer par tous les tableaux, et appeler « removeObjectIdenticalTo » sur les

Pourquoi? Est-ce parce que vous imaginez que c'est inefficace? Comment le sais-tu? Cependant, pour une efficacité réelle, et en supposant que les objets sont tous des objets différents, utilisez NSSet et non NSArray. L'accès à un objet particulier est garanti efficace.

Questions connexes