NSMutableArray et removeObjectAtIndex

Sébastien M.Sébastien M. Membre
19:37 modifié dans Vos applications #1
Bonjour tout le monde.

Une question idiote que je me pose...

<br />Objet * unObjet = [[Objet alloc] init]; /* Création de mon objet */<br /><br />NSMutableArray * uneListe = [[NSMutableArray alloc] init]; /* Création d&#39;une Liste */<br />[uneList addObject:unObject]; /* Ajout de l&#39;objet dans la liste */<br /><br />[unObjet release]; /* Suppression de mon objet */<br /><br />[uneListe removeObjectAtIndex:0]; /* Suppression de l&#39;objet à  l&#39;index 0 de la liste */<br />


Que ce passe t-il avec le code suivant lors de la suppression de l'objet de la liste ? A t-on un mécanisme de release ou d'autorelease de l'objet contenu à  l'index 0 de "uneListe" ou simplement la suppression d'un pointeur pointant vers cet espace mémoire ? Le contenu de la liste à  l'index 0 existe t'il encore malgré le fait qu'on n'ai plus accès à  lui ou à  t'il réellement été effacé ?

C'est idiot comme question mais ça m'embêterait de laisser de la mémoire occupé alors qu'elle est inutilisable...

Réponses

  • zoczoc Membre
    19:37 modifié #2
    Tout le contenu du tableau est décalé d'une position (l'objet à  l'index 1 prend place de l'objet retiré en position 0, etc...). Evidemment, "removeObjectAtIndex" appelle "release" sur l'objet qui est supprimé.

  • AliGatorAliGator Membre, Modérateur
    19:37 modifié #3
    tout comme addObject appelle "retain" quand il est ajouté : les classes de collections (NSDictionary, NSArray, ...) retiennent leurs éléments quand tu les ajoutes et le relâche quand tu les retires.

    Toujours la même règle : tu ne fais les release ou autorelease que des objets dont tu as toi-même fait le alloc/init. Par exemple là  tu as fait un alloc/init sur unObject, à  toi de faire un release. Et comme il a été entre temps ajouté au tableau il existera toujours car retenu dans le tableau... jusqu'à  ce que tu le remove du tableau évidemment.
  • Sébastien M.Sébastien M. Membre
    19:37 modifié #4
    Merci beaucoup à  vous deux ! ;)
Connectez-vous ou Inscrivez-vous pour répondre.