J'ai utilisé autorelease tout au long de mon application et je voudrais comprendre le comportement de la méthode autorelease. Quand le pool autorelease par défaut est-il vidé? est-il basé sur une minuterie (tous les 30sec?) ou doit être appelé manuellement? Ai-je besoin de faire quoi que ce soit pour publier des variables marquées avec autorelease?Quand le pool autorelease est déclenché
Répondre
Il y a (je dirais) 3 cas principaux lors de leur création et de diffusion:
1.Beginning et fin de l'application du cycle de vie, écrit dans main.m
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
2.Beginning et fin de chaque événement (Fait dans le AppKit)
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- (void)loadView
/* etc etc initialization stuff... */
[pool release];
3.Whenever vous voulez (vous pouvez créer votre propre piscine et le libérer. [from apple memory management document])
– (id)findMatchingObject:anObject {
id match = nil;
while (match == nil) {
NSAutoreleasePool *subPool = [[NSAutoreleasePool alloc] init];
/* Do a search that creates a lot of temporary objects. */
match = [self expensiveSearchForObject:anObject];
if (match != nil) {
[match retain]; /* Keep match around. */
}
[subPool release];
}
return [match autorelease]; /* Let match go and return it. */
}
Il est drainé à chaque fois que la boucle d'exécution se termine. C'est quand votre méthode et la méthode appelant votre méthode et la méthode appelant cette méthode et ainsi de suite est tout fait.
De l'documentation:
Le kit d'application crée un pool autorelease sur le thread principal au début de chaque cycle de la boucle d'événements, et les drains à la fin, libérant ainsi des objets autoreleased générés tout le traitement d'un événement
Chaque événement externe déclenche un cycle de la boucle d'exécution, par ex. Evénement de souris, appui sur une touche, réception de données sur une connexion HTTP asynchrone etc. NSTimers également, mais les timers utilisaient un chemin de code légèrement différent pour que le pool de libération automatique ne soit pas drainé jusqu'à la réception d'un événement réel. Cela aurait pu être corrigé maintenant. – JeremyP
- 1. NSOperation et le pool Autorelease
- 2. Nombre d'objets dans Autorelease Pool
- 3. Flux de travail du pool autorelease
- 4. Quand et pourquoi le threading TimerCallback est-il déclenché?
- 5. Lorsque vous utilisez autorelease, quand est-il réellement publié?
- 6. objectif-c autorelease
- 7. Quelle est la portée des pools autorelease (imbriqués)?
- 8. Piscines AutoRelease dans un pour le « contexte de
- 9. comment trouver des objets avec le message autorelease?
- 10. Autorelease pools dans les applications appkit
- 11. Autorelease NSString
- 12. est le pool de threads partagé - .net
- 13. Dois-je laisser les vars/objets passés hors du pool autorelease?
- 14. recyclez le pool de l'application asp.net dans le même pool
- 15. iphone threads débutant question, avoir des problèmes avec la gestion autorelease pool
- 16. Autorelease pour CGMutablePathRef?
- 17. Quand l'événement de défilement est-il déclenché lorsqu'une page est en cours de chargement?
- 18. Création d'objets autorelease dans le développement iPhone
- 19. compte de référence Objective-C et AutoRelease
- 20. autorelease provoque piscine accident dans l'application RubyCocoa
- 21. HttpContext.Current est null lorsque CacheItemRemovedCallback est déclenché
- 22. unarchiveObjectWithFile conserve/autorelease nécessaire?
- 23. UITableViewCell, dequeue et autorelease?
- 24. autorelease objet précédent par cession
- 25. Empêche leclic lorsque ondblclick est déclenché
- 26. IE6 bug. La taille de la div augmente quand un: hover est déclenché
- 27. Les pools multithread et autorelease fonctionnent-ils ensemble dans Cocoa?
- 28. Gestion de la mémoire Autorelease contre Alloc Question
- 29. Tableau image ne montrant, « Pop une piscine autorelease » erreur
- 30. Fuite de mémoire à la piscine Autorelease dans Iphone sdk
Que diriez-vous de sous-fil? Quel est le comportement par défaut si nous ne créons pas le pool explicitement? – jianhua