Très bien, c'est une question élémentaire mais je demande parce que je ne comprends pas honnêtement comment gérer correctement cela. Si je décommente les deux dernières lignes, ce code se bloque, même si je ne pense pas qu'il devrait le faire.Libération de l'objet correct Memory/Obj-C. Lequel de ceux-ci exige la libération?
Le code suivant provient d'un UILabel sous-classé personnalisé dans lequel j'ai ajouté la méthode suivante, setTextFromFloat.
-(void)setTextFromFloat:(float)newValue {
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode:NSNumberFormatterRoundUp];
NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:newValue]];
NSString *newLabelValue = [numberString stringByAppendingString:@"x"];
self.text = newLabelValue;
//[numberString release];
//[formatter release];
}
Donc, il y a trois objet ici que je suis confus au sujet de:
a) self.text (l'ancienne valeur de chaîne) - Lorsque cela est libéré? Devrais-je libérer l'ancien contenu de self.text lorsque j'appelle cette fonction?
b) formatter, le NSNumberFormatter j'alloc'd ici a besoin presque certainement la libération
c) Qu'en est-numberString? Je l'utilise juste comme un intermédiaire pour construire newLabelValue. si je le libère, je crois que le programme se bloque, mais pourquoi? Ne suis-je pas responsable de la mémoire utilisée indirectement en appelant stringFromNumber?
Toute sagesse grandement appréciée, merci!
Je vous recommande fortement de faire un "Build and Analyze" dans le menu Build. Il mettra en évidence exactement ce que vous êtes en train de relâcher ou de relâcher. – BarrettJ