D'habitude, j'écrire mon dealloc pour ressembler à ceci:Utilisation de soi sur iVars dans dealloc?
- (void)dealloc {
[coffeeList release];
[super dealloc];
}
Mais aujourd'hui, je dactylographiées (voir ci-dessous) et était un peu perplexe pourquoi je suis une erreur en cours d'exécution du code par l'analyseur statique clang. Comme je le disais, je ne m'y ajoute généralement pas à iVars dans dealloc, mais j'étais juste un peu curieux quand j'ai vu ça comme ce qui se passait.
- (void)dealloc {
[[self coffeeList] release];
[super dealloc];
}
gary.
Je suis seulement nouveau à l'objectif-c mais à mon avis les deux libèrent [self selfList]; et [version de coffeeList]; semblerait être le même. Bien qu'il semblerait que la syntaxe confonde LLVM 1.5 CLANG. – fuzzygoat
Ce ne sont pas les mêmes. Les règles de gestion de la mémoire vous indiquent de ne libérer que les objets que vous possédez. Qu'est-ce qui se passe ici, c'est '[self coffeeList]' possède 'coffeeList', pas vous. Qu'est-ce qu'il implémente est fondamentalement ceci: 'retour [[coffeeList] autorelease];' qui si vous connaissez vos règles, signifie qu'il possède coffeeList, et sera libéré à un point arbitraire à l'avenir. Vous devez libérer l'ivar lui-même * directement *. – jer
Merci, juste ce que j'étais après, je voulais comprendre ce qui se passait, et maintenant je le fais. Très apprécié ... – fuzzygoat