Petite question sur la mémoire
muqaddar
Administrateur
Oup là boom,
Une petite question avant d'aller dormir.
Dans une méthode de sauvegarde -void(), j'ai :
ça marche très bien. Maintenant , paysSaveArray est construit en autorelease, mais ça s'autorelease quand ? Là , mon tableau est construit dans une boucle en plus. Je me demande tjs s'il vaut pas mieux faire :
puis le release :
Ce qui est plus sûr non ?
Je suis pas toujours sûr quand il faut faire ou pas un retain, bien que j'ai lu le tut de Renaud sur la mémoire chez PO.
Une petite question avant d'aller dormir.
Dans une méthode de sauvegarde -void(), j'ai :
<br /> NSMutableArray *paysSaveArray = [NSMutableArray array];<br /> NSEnumerator *enumerator = [paysArray objectEnumerator];<br /> NSDictionary* dict;<br /> while (dict = [enumerator nextObject]) {<br /> NSMutableDictionary *tempDict = [NSMutableDictionary dictionary];<br /> [paysSaveArray addObject: tempDict];<br /> }<br /> [paysSaveArray writeToFile: paysPrefsFile atomically:YES];
ça marche très bien. Maintenant , paysSaveArray est construit en autorelease, mais ça s'autorelease quand ? Là , mon tableau est construit dans une boucle en plus. Je me demande tjs s'il vaut pas mieux faire :
NSMutableArray *paysSaveArray = [[NSMutableArray array] retain];
puis le release :
[paysSaveArray release];
Ce qui est plus sûr non ?
Je suis pas toujours sûr quand il faut faire ou pas un retain, bien que j'ai lu le tut de Renaud sur la mémoire chez PO.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si c'est le mode de fonctionnement que tu cherches, alors tant mieux.
Le retain est nécessaire si tu a encore besoin de ton objet plus tard, mais là je pense que tu ne te sers plus de ton objet une fois la sauvegarde effectuée.
Si tu as encore besoin de ton objet, j'utiliserais plutot la méthode initWithCapacity plutot qu'un constructeur, pour éviter de s'emmêler les pinceaux et gérer plus logiquement ton retain count.
Ah, bein, en gros c'est ça que je voulais savoir. Je n'en ai pas besoin ailleurs.
Avec initWithCapacity, à quoi correspond 0 ?
initWithCapacity est interessant si tu veux réserver en l'avance de la mémoire. Dans le cas où tu mets 0, cela revient au même que de faire un init simple.