Pour la plupart, avec ARC (Automatic Reference Counting), nous n'avons pas besoin de penser à propos de la gestion de la mémoire avec l'Objective-C objets. Il n'est pas permis de créer NSAutoreleasePool
s plus, cependant il y a une nouvelle syntaxe:
@autoreleasepool {
…
}
Ma question est, pourquoi aurais-je besoin de ce lorsque je ne suis pas censé être manuellement libération/autoreleasing ?
EDIT: Pour résumer ce que je suis sorti de toutes nous répondons et commentaires succinctement:
Nouvelle Syntaxe
@autoreleasepool { … }
est une nouvelle syntaxe pour les
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
…
[pool drain];
Plus important encore,
- L'ARC utilise autorelease ainsi que la libération
- Il a besoin d'un autorelease pool en place pour le faire
- L'ARC n'a pas créer l'autorelease pool pour vous cependant,
- Le thread principal de chaque Cacao application dispose déjà d'un autorelease pool en elle
- Il y a deux occasions où vous voudrez peut-être faire usage d'
@autoreleasepool
- Lorsque vous êtes dans un thread secondaire et il n'y a pas d'auto-libération de la piscine, vous devez faire votre propre pour éviter les fuites, comme
myRunLoop(…) { @autoreleasepool { … } return success; }
- Lorsque vous souhaitez créer une piscine locale, comme mattjgalloway a indiqué dans sa réponse
- Lorsque vous êtes dans un thread secondaire et il n'y a pas d'auto-libération de la piscine, vous devez faire votre propre pour éviter les fuites, comme