web-dev-qa-db-fra.com

Qu'est-ce que l'autoreleasepool?

Duplicata possible:
Pourquoi utiliser le pool Autorelease?

La page de démarrage d'Objective-C s'ouvre avec une valeur par défaut @autoreleasepool{...} instruction sous la déclaration de fonction principale. Mais que fait réellement cette déclaration? Le nouvel Objective-C libère automatiquement les objets et la suppression de la ligne ne change rien au programme. Cette commande est-elle vraiment nécessaire?

57
moray95

L'instruction @autoreleasepool Fait le même travail qu'auparavant, au lieu d'utiliser la classe NSAutoreleasePool . Le fonctionnement de NSAutoreleasePool était un peu bizarre, car sa création a provoqué un effet dans toute l'application; @autoreleasepool Crée une zone délimitée et rend plus clair ce qui se trouve dans la piscine et quand elle s'écoule (quand elle sort du domaine). Il est également plus efficace selon Apple.

Le concept d'un pool de libération automatique est simple, chaque fois qu'une instance d'objet est marquée comme libérée automatiquement (par exemple NSString* str = [[[NSString alloc] initWithString:@"hello"] autorelease];), Elle aura un nombre de retenues de +1 à ce moment, mais à la fin de l'exécution , le pool est vidé, et tout objet marqué à libération automatique voit son nombre de rétentions décrémenté. C'est une façon de garder un objet tout en préparant ce qui le retiendra pour lui-même.

Avec ARC, alors que le mot clé autorelease n'est pas utilisé par le développeur, le système sous-jacent qui gère ARC l'insère pour vous. ( N'oubliez pas: Tout ce que fait ARC est d'insérer pour vous retain, release et autorelease aux moments appropriés). Pour cette raison, le concept AutoreleasePool existant doit rester.

Si vous supprimez le pool de libération automatique, vos objets commenceront à fuir

Dans un environnement compté par référence, Cocoa s'attend à ce qu'un pool de libération automatique soit toujours disponible. Si aucun pool n'est disponible, les objets libérés automatiquement ne sont pas libérés et vous perdez de la mémoire. Dans cette situation, votre programme enregistre généralement les messages d'avertissement appropriés.

80
WDUK