Quand UIViewController viewDidUnload est-il appelé?

Remarque: Cette question est obsolète – viewDidUnload est obsolète iOS 6.

Quand est-ce que viewDidUnload de UIViewController est automatiquement appelé? Oui je sais, quand la vue se décharge. Mais quand cela se produit-il automatiquement? Comment puis-je le faire manuellement? Merci.

Si vous émettez un avertissement de mémoire dans le simulateur (regardez dans le menu), cela sera appelé pour tout contrôleur de vue attaché à une vue qui n’est pas visible.

C’est parce que les contrôleurs de vue par défaut sont enregistrés pour les notifications d’avertissement de mémoire, et toute vue qui n’est pas utilisée actuellement sera déchargée par le contrôleur de vue – la méthode viewDidUnload est là pour que vous puissiez nettoyer tout ce que vous souhaitez mémoire (ou si vous avez conservé des IBOutlets pour libérer de la mémoire qui serait sinon libérée par la vue en cours de déchargement).

En général, tous les IBOutlets que vous publiez dans dealloc doivent également être libérés (et les références définies à nil) dans cette méthode.

En plus d’émettre manuellement un avertissement de mémoire dans le simulateur, vous pouvez en émettre un par programme avec

 - (void)_simulateLowMemoryWarning { // Send out MemoryWarningNotification [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidReceiveMemoryWarningNotification object:[UIApplication sharedApplication]]; // Manually call applicationDidReceiveMemoryWarning [[[UIApplication sharedApplication] delegate] applicationDidReceiveMemoryWarning:[UIApplication sharedApplication]]; } 

Vous pouvez alors faire en sorte que cela se produise toutes les 5 secondes en utilisant une timer

 static NSTimer *gLowMemoryTimer = nil; - (void)stopLowMemoryTimer { [gLowMemoryTimer invalidate]; gLowMemoryTimer = nil; } - (void)startLowMemoryTimer { if (gLowMemoryTimer) { [self _stopLowMemoryTimer]; } gLowMemoryTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(_simulateLowMemoryWarning) userInfo:nil repeats:YES]; } 

-viewDidUnload est appelée chaque fois que la propriété de vue de viewcontroller est définie sur nil, manuellement ou le plus souvent via didReceiveMemoryWarning:

iOS 6.x et versions ultérieures

Je sais que c’est une question plus ancienne, mais je pense qu’une réponse devrait être soumise concernant les modifications apscopes à l’API viewDidUnload dans iOS 6, à savoir que dans iOS 6, viewDidUnload n’est plus appelé (du tout) et est devenu obsolète.

viewDidUnload appelé dans des conditions de mémoire insuffisante. Nous devrions décharger les éléments chargés dans la méthode viewDidLoad. Nous devons renoncer à la propriété de l’object en appelant la méthode accessor pour la définir sur nil. Dans le cas d’un sharepoint vente, l’object se libère pour que la référence de l’object puisse être définie en toute sécurité sur zéro. S’il ne s’agit pas d’une propriété synthétisée, nous devons d’abord libérer l’object que nous avons défini à nil.