Quelle est la différence entre viewDidLoad
et viewDidAppear
? Quel type d'initialisation ou de code personnalisé entre dans ces fonctions?
par exemple presentModalViewController
ne fonctionne que lorsqu'il est présent dans viewDidAppear
et pas sur viewDidLoad
.
Réponses:
viewDidLoad
est appelé exactement une fois, lorsque le contrôleur de vue est chargé pour la première fois en mémoire. C'est ici que vous souhaitez instancier les variables d'instance et créer toutes les vues qui durent pendant tout le cycle de vie de ce contrôleur de vue. Cependant, la vue n'est généralement pas encore visible à ce stade.viewDidAppear
est appelée lorsque la vue est réellement visible et peut être appelée plusieurs fois au cours du cycle de vie d'un contrôleur de vue (par exemple, lorsqu'un contrôleur de vue modale est fermé et que la vue redevient visible). C'est là que vous souhaitez effectuer des actions de mise en page ou faire n'importe quel dessin dans l'interface utilisateur - par exemple, présenter un contrôleur de vue modale. Cependant, tout ce que vous faites ici doit être reproductible. Il est préférable de ne pas conserver les choses ici, sinon vous aurez des fuites de mémoire si vous ne les relâchez pas lorsque la vue disparaît.Voir: https://developer.apple.com/documentation/uikit/uiviewcontroller
la source
viewDidLoad
n'est généralement appelé qu'une seule fois, il existe une situation où il peut être appelé à nouveau. Plus précisément, si jamais vous recevez undidReceiveMemoryWarning
, vos vues non visibles peuvent être libérées (bien que les contrôleurs de vue ne soient pas touchés) et lorsque vous revenez, ellesviewDidLoad
peuvent être appelées à nouveau.didReceiveMemoryWarning
. Mais je suis d'accord que si vous utilisez de bonnes pratiques lors de la rédaction de votreviewDidLoad
, tout devrait aller bien. Mon seul point est qu'une utilisation bâclée des ivars et de la gestion manuelle de la mémoire peut certainement entraîner des fuitesviewDidLoad
. Les gens doivent être sensibles audidReceiveMemoryWarning
scénario et programmer en conséquence.viewDidLoad
code sur lequel fuiraitdidReceiveMemoryWarning
. Soupir.En termes simples, vous voudrez créer des contrôles ou des tableaux dans
viewDidLoad
, où comme dansviewDidAppear
est l'endroit où vous souhaitez actualiser ces contrôles ou tableaux.viewDidLoad
est appelé une fois lorsque le contrôleur est créé etviewDidAppear
est appelé chaque fois que la vue, eh bien, DID apparaît. Supposons que vous ayez une vue modale que vous présentez, lorsque cette vue est rejetée,viewDidAppear
elle sera appelée etviewDidLoad
ne sera pas appelée.la source
viewDidLoad
peut être appelé plus d'une fois . Si votre vue alors qu'elle n'est pas affichée (sous une pile d'autres vues) est déchargée par les anciennes versions d'iOS dans une situation de mémoire insuffisante, alors le contrôleur de vue rechargera automatiquement la vue après avoir besoin d'être ré-affichée à l'écran. Dans les versions ultérieures d'iOS, vous pouvez choisir d'aider à réduire l'utilisation de la mémoire en faisant ce qu'iOS antérieur faisait pour vous: Déchargez les vues hors écran lorsque ledidReceiveMemoryWarning
message arrive, auquel cas leviewDidLoad
sera à nouveau appelé.