La documentation ne dit rien à ce sujet. Quand un ancien objet est "enlevé" et qu'un nouveau vient à sa place, alors que se passe-t-il avec l'ancien? Dois-je le libérer moi-même?Est-ce que -replaceObjectAtIndex: withObject: de NSMutableArray libère l'ancien objet qui est remplacé par un nouveau?
Répondre
Non, vous n'avez pas à le relâcher par vous-même.
Vous pouvez obtenir une erreur si l'objet remplacé a un nombre égal à conserver 0.
Le nouvel objet est retenu. L'ancien objet est libéré.
Vous n'avez pas besoin de le libérer.
Vous n'a pas effectué une alloc, copie ou conserver dessus et ne sont donc pas responsables de la mémoire - avec ce la documentation est tout à fait clair.
Je ne m'attendrais pas à ce qu'Apple documente les procédures de gestion de la mémoire pour chaque méthode dans le SDK à moins que cela ne viole les règles de gestion de la mémoire qu'ils ont déjà établies. Si la documentation ne dit rien, vous pouvez supposer que les règles par défaut s'appliquent.
La documentation indique très clairement ce droit en haut du fichier:
Comme NSArray, les instances de NSMutableArray maintenir de solides références à leur contenu. Si vous n'utilisez pas la récupération de place, lorsque vous ajoutez un objet à un tableau, l'objet reçoit un message de conservation. Lorsqu'un objet est supprimé d'un tableau mutable, il reçoit un message de libération. S'il n'y a pas d'autres références à l'objet, cela signifie que l'objet est désalloué. Si votre programme conserve une référence à un tel objet, la référence deviendra invalide à moins que vous n'envoyiez à l'objet un message de conservation avant qu'il ne soit supprimé du tableau.
Il est inutile de documenter ceci de manière répétée pour chaque méthode.
Vous ne pourriez pas obtenir cette erreur immédiatement si le retainCount> 1 (quand certains autres objets le retiennent encore). – rein
@rein - Vous avez raison. J'ai édité la réponse à un frasing plus correct. – Kriem
+1 pour une réponse claire et concise. Merci. –