44 votes

Avec un NSArray de références de l'objet, puis-je libérer explicitement tous les objets dans le tableau, ou juste le tableau lui-même?

Ma classe a un NSArray qui est rempli avec des objets. Dans ma méthode dealloc, puis-je tout simplement appeler release sur mon NSArray, ou dois-je effectuer une itération de la matrice et la libération de tous les objets en premier?

55voto

Marc W Points 13166

Vous pouvez appeler release directement sur l' NSArray. La mise en œuvre de l' NSArray va prendre soin de l'envoi d' release de tous les objets stockés dans le tableau.

10voto

Marc Charbonneau Points 30464

NSArray conserve des objets lorsqu'ils sont ajoutés, et les rejets lorsqu'ils sont supprimés ou le tableau est libéré. Gardez cela à l'esprit, c'est cette notion de "propriété" qui conservent/libération de la gestion de la mémoire est construite. C'est la même chose avec l'objet qui possède le tableau, si elle a également conservé les objets dans le tableau, vous aurez besoin de leur envoyer un autre message de libération dans votre dealloc mise en œuvre. Si non, et si pas d'autres objets retenus, ils vont être libéré une fois que le tableau libère.

1voto

Tim Points 33042

Vous devriez être en mesure de libérer juste le NSArray, et elle libère tous ses objets, indépendamment de savoir si vous êtes en possession d'autres références à eux. Si vous avez une instance de l'objet qui existe également dans le NSArray, vous aurez à libérer cet objet explicitement - il suffit de relâcher le NSArray peut pas dealloc l'objet en dehors de la matrice de contexte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X