Je suis en train de créer une application iPhone dans laquelle je détache des threads pour effectuer un travail de longue durée en arrière-plan afin de ne pas accrocher l'interface utilisateur. Je comprends que les threads ont besoin d'instances NSAutoreleasePool pour la gestion de la mémoire. Ce dont je ne suis pas sûr, c'est si la méthode threadée appelle une autre méthode - cette méthode nécessite-t-elle aussi un NSAutoreleasePool?NSAutoreleasePool portant sur les méthodes?
code Exemple:
- (void)primaryMethod {
[self performSelectorInBackground:@selector(threadedMethod) withObject:nil];
}
- (void)threadedMethod {
NSAutoreleasePool *aPool = [[NSAutoreleasePool alloc] init];
// Some code here
[self anotherMethod];
// Maybe more code here
[aPool drain];
}
- (void)anotherMethod {
// More code here
}
La raison pour laquelle je demande est que je reçois des erreurs que les objets sont autoreleased sans piscine en place, et sont « juste fuite. »
J'ai vu d'autres questions pour lesquelles les gens ne disposaient pas des piscines autorelease en place du tout, et je comprends pourquoi une piscine autorelease est nécessaire. Je suis particulièrement intéressé à savoir si un pool autorelease créé dans (dans cet exemple) threadedMethod
s'applique aux objets créés dans anotherMethod
.
La réponse courte est oui. Voir ma réponse. – SwiftArchitect