Je sais qu'une question similaire a déjà été résolue avant here, mais je veux juste m'assurer que je la comprends un peu mieux. Voici mon scénario ...Clarification sur la gestion de la mémoire IPhone (Autorelease)
J'ai une méthode de classe d'aide qui retourne un UIImageView alloué, comme on le voit ci-dessous.
+(UIImageView *)tableCellButton{
return [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image"]] autorelease];
}
Puis, dans un de mes méthodes de UIViewController je l'utilise en tant que tel ..
UIImageView *imageView = [Helper tableCellButton];
imageView.frame = cell.backgroundView.bounds;
imageView.tag = 250;
[cell.backgroundView addSubview:imageView];
Ma question est en ce qui concerne la façon dont cette mémoire est libérée. Je n'utilise pas un pool autorelease (autre que l'application créée), et la variable n'est pas un iVar/Property (donc il ne sera pas libéré quand dealloc est appelé). Dans ce cas, suis-je responsable de libérer la mémoire après l'avoir appelée? Quand est-ce que autorelease entre en jeu? Merci pour l'aide!
Voir cette question ici quand les [Communiqués de AutoreleasePool] (http://stackoverflow.com/questions/581828/autorelease-scope). J'espère que cela vous donnera un aperçu. Vous n'aurez jamais besoin de 'release 'et d'objet' auto-released '. Il ne survivra probablement que par" event "s'il est créé lors d'une pression sur un bouton, ou tant que' cell.backgroundView' persiste ('addSubview 'retains.) –
à droite sur la version ... Donc, le seul pool autorelease dans mon application est celui qui réside dans le principal. Puisque c'est le cas, cela cause-t-il une fuite, ou cet objet recevra-t-il une version quand le ViewController nettoiera la table et les cellules? – DerekH
Merci pour vos réponses! J'ai également trouvé les docs de gestion de la mémoire pour iOS (je ne sais pas comment je les ai manqués avant). http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html#//apple_ref/doc/uid/10000011-SW1 – DerekH