Table des matières:
- La méthode didReceiveMemoryWarning
- La méthode applicationDidReceive MemoryWarning:
- UIApplicationDidReceiveMemory WarningNotification: notification
- Choisir la bonne stratégie de gestion de la mémoire pour votre application
Vidéo: [TUTO] Espace disponible insuffisant Android | Que Faire ? 2025
Même si vous avez tout fait correctement, dans une grande application iOS, il se peut que vous manquiez de mémoire. Lorsque cette situation se produit, le système envoie une notification de mémoire insuffisante à votre application et vous devez y faire attention. Si vous ne le faites pas, c'est une recette fiable pour un désastre. UIKit vous permet de configurer votre application de plusieurs façons afin que vous receviez rapidement des notifications en mémoire insuffisante:
-
Remplacez les méthodes didReceiveMemoryWarning dans votre sous-classe personnalisée UIViwComtroller.
-
Implémentez la méthode applicationDidReceiveMemoryWarning: de votre délégué d'application.
-
Enregistrez-vous pour recevoir la notification UIApplicationDidReceiveMemoryWarningNotification:
La méthode didReceiveMemoryWarning
La méthode didReceiveMemoryWarning est envoyée au contrôleur de vue lorsque l'application reçoit un avertissement de mémoire. Votre implémentation de cette méthode devrait faire tout ce qu'elle peut pour réduire son utilisation de la mémoire. Cela peut impliquer des étapes drastiques telles que la fermeture des vues, mais vous pouvez prendre de nombreuses autres mesures qui dépendent de votre contrôleur de vue spécifique et de ses vues.
Par exemple, si vous avez stocké des données et des objets, ils peuvent être supprimés et mis à zéro si vous pouvez les recréer au besoin.
La méthode applicationDidReceive MemoryWarning:
Votre délégué d'application doit définir toutes les références aux objets qu'il peut libérer sans risque.
UIApplicationDidReceiveMemory WarningNotification: notification
Les notifications en mémoire faible sont envoyées au centre de notifications, où toutes les notifications sont centralisées. Un objet qui veut s'informer sur les notifications s'enregistre lui-même dans le centre de notifications en indiquant la notification à laquelle il veut être informé et un bloc à appeler lorsque la notification est déclenchée. Au lieu d'un bloc, vous pouvez fournir une méthode cible à appeler.
Un objet de modèle, par exemple, pourrait alors libérer des structures de données ou des objets qu'il possède dont il n'a pas besoin immédiatement et qui peuvent être recréés plus tard en mettant des références à zéro.
Pour ceux d'entre vous qui sont curieux, dans votre objet modèle, vous pouvez ajouter:
[[NSNotificationCenter defaultCenter] addObserverForName: objet UIApplicationDidReceiveMemoryWarningNotification: [UIApplication sharedApplication] queue: nil usingBlock: ^ (NSNotification * notif) {// votre code ici }];
Vous pouvez tester applicationDidReceiveMemoryWarning: et UIApplicationDidReceiveMemoryWarningNotification: dans le simulateur en choisissant Hardware → Simulate Memory Warning.
Choisir la bonne stratégie de gestion de la mémoire pour votre application
Chacune de ces stratégies permet à une partie différente de votre application de libérer la mémoire dont elle n'a plus besoin (ou dont elle n'a pas besoin actuellement). La manière dont ces stratégies fonctionnent pour vous dépend de l'architecture de votre application. Vous devrez donc l'explorer par vous-même.
Si vous ne libérez pas suffisamment de mémoire, iOS envoie à votre application le message ApplicationWillTerminate: et ferme l'application. Cependant, pour de nombreuses applications, la meilleure défense est une bonne attaque, ce qui signifie que vous devez gérer efficacement votre mémoire et éliminer les fuites de mémoire dans votre code en suivant les règles de l'ARC.
Pour les tests, implémentez toutes ces méthodes et placez les instructions NSLog avec les points d'arrêt afin que vous puissiez voir les problèmes de mémoire au fur et à mesure. Il est facile de localiser les endroits où vous pouvez libérer de la mémoire, mais il est plus efficace de cibler ceux qui offrent le meilleur rendement pour votre argent de programmation.
