Au moment où je pensais avoir complètement compris ce sujet, je suis de retour aux sources.Méthodes qui appellent méthodes: bases de Autorelease?
J'ai une méthode qui instancie un objet autoreleased, en utilisant (par exemple) stringWithFormat
:
return [NSString stringWithFormat:@"what"];
J'appelle cette méthode d'une autre méthode, et une autre méthode, chaque fois retourner ce autoreleased NSString
et dans chaque niveau de la hiérarchie. Le code fonctionne correctement et l'instance NSString
est intacte à chaque niveau de la hiérarchie.
I pensé que depuis l'instance est autoreleased, il pourrait se terminer brusquement avec un retainCount
de 0 à un point quelconque dans la pile d'appel (à savoir, l'une des méthodes travailleraient sur un objet libéré). Est-il vrai que je ne peux pas dépendre de cet objet?
Modifier: Je réalise que la question n'était pas trop claire. Pardon. Je veux dire:
Method1 ---calls---> Method2 ---calls---> Method3 ---instantiates the string--->
Vous ne verrez probablement jamais un nombre de retenues de 0. Si un objet a un nombre de retenues de 1 lorsque la libération est appelée, il est désalloué au lieu de décrémenter le nombre de rétention. De plus, dans l'exemple, stringWithFormat pourrait être assez intelligent pour renvoyer le littéral transmis car il ne contient aucun spécificateur de format. – JeremyP
@JeremyP, bon point sur les comptes retenus n'atteignant jamais zéro. D'un autre côté, mon exemple original était en fait 'return @" quoi ";', qui est le même dans cet exemple, je pense. –