Ce problème n'est jamais arrivé à moi. J'ai un UIViewController à l'intérieur d'une uoinavigationController. Lorsqu'un avertissement de mémoire est reçu (NEWLIND le niveau), la méthode Je teste avec un iPad 1 sur iOS 4.3.3. P>
Toute suggestion? P> ViewDiDunload code> du contrôleur fort> visible forge> est appelée, la vue est non chargée et je reçois un écran noir génial (avec une barre de navigation en haut). P>
3 Réponses :
Selon Son iOS en fait fournissant des chances de purger vos données temporaires qui seront utiles tout en recréant la vue. Etant donné que votre Apple code> Directives de gestion de la mémoire lorsqu'un
ViewController Code> reçoit des avertissements de mémoire dans des situations critiques, il appelle directement
ViewDidunload code> de sorte que la mémoire puisse être gérée par libérer la vue. p>
uiviewcotroller code> est la page racine code> de la liste code> du
NavigationController code> Vous voyez la barre de navigation OLY La vue est déchargée. p>
@emenegro Voir ceci LINK , SECTION" COMPRENDRE Comment les vues sont chargées et déchargées " gras b> Figure 4-2 Bold B> montre comment les vues sont déchargées lorsque la vueController reçoit une avertissement de mémoire. Aussi son explication au-dessus de la figure.
J'ai vu ces documents il y a longtemps et je ne vois nulle part où est la situation exceptionnelle en ce qu'une vue visible peut être déchargée. Ces documents expliquent comment une vue est déchargée et, C & P des étapes de déchargement du cycle: "Si la vue ne peut pas être libérée en toute sécurité (par exemple, elle est visible à l'écran) ...". Je veux donc savoir s'il est possible d'obtenir une vue déchargée tout en visible, dans ce cas étant dans une pile de navigation.
Vous recevez ViewDidunload dans une situation de mémoire faible sur les contrôleurs, où IOS a déterminé que les vues ne sont plus nécessaires. N'oubliez pas que Apple a apporté des améliorations sur les implémentations sur les versions ultérieures d'IOS, il pourrait s'agir de voir ce qui se passe sous 5 xx. Deuxièmement, vous devriez revoir votre hiérarchie de contrôleur de vue. P>
De ce que je comprends, la méthode Parfois, cependant, il est essentiel de garder des points de vue sur la manière dont je me contente de simplement remplacer la méthode ou mieux encore, vérifiez si Si vous détenez des caches d'image ou quelque chose, videz-les à la place. P>
htth p> ViewDiDunload Code> est appelée par
didrecievememorywarning code> dans le
uiviewcontroller code> (la super classe). Fondamentalement, IOS vous donne quelques avertissements et vous attendez à voir votre utilisation de la mémoire diminuer. Si vous continuez à ignorer ces éléments, OS tuera votre application. p>
didrecievememorywarning code> et à l'intérieur, ne faites rien. p>
auto code> est la vue actuelle dans le
autoavigationController.VisibleViewController. / code>, et si oui, ne transmettez pas l'appel d'avertissement de la mémoire à
[Super Didrecievememororywarning] Code>. P>
Remarque rapide, iOS6 a changé ce comportement maintenant. UIViewController n'appelle pas automatiquement ViewDidunload code> sur un avertissement de mémoire par défaut. Il appelle simplement le
didreceivememorywarning code> méthode et c'est tout. Seulement iOS6.
Que ressemble la propriété "Vues" du contrôleur NAV lorsque vous obtenez cet avertissement (c'est-à-dire ce qui y est, l'ordre, etc.)? En outre, dans votre viewdiDunload, ajoutez le journal nslog (@ "fenêtre:% @", Self.View.window) "- Cela vous dira si la vue est visible.
Est-ce un "réel" avertissement ou celui que vous avez simulé?
David, c'est un vrai.
appelez-vous [super viewdidunload]; ?
Seulement sur votre contrôleur de vue enfant, pas le contrôleur NAV?
Oui, la vue déchargée est celle contenue dans le contrôleur NAV.
Votre hiérarchie de ViewController est-elle valide? Comment tous vos contrôleurs ont-ils été ajoutés à la racine?