Sobes.tech
Middle

Parlez-moi du cycle de vie du contrôleur Vue.

sobes.tech IA

Réponse de l'IA

Le cycle de vie d'un contrôleur de vue (UIViewController) en iOS représente une séquence d'événements se produisant de sa création à sa destruction. Les étapes principales :

  1. Initialisation :
    • init?(coder aDecoder: NSCoder): Initialisation depuis Storyboard/Nib.
    • init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?): Initialisation depuis un fichier Nib ou programmatique sans Nib.
    • loadView(): Chargement ou création de la vue racine du contrôleur. Si Storyboard/Nib est utilisé, appelé automatiquement. Pour création programmatique, doit être redéfini.
  2. Chargement de la vue :
    • viewDidLoad(): Appelé après le chargement de la vue en mémoire. Convient pour les configurations d'initialisation ne nécessitant pas d'accès aux géométries.
  3. Apparition de la vue :
    • viewWillAppear(_ animated: Bool): Appelé juste avant que la vue du contrôleur devienne visible. Convient pour mettre à jour les données pouvant changer entre les apparitions.
    • viewDidAppear(_ animated: Bool): Appelé après que la vue du contrôleur est devenue visible. Convient pour lancer des animations ou autres tâches à exécuter uniquement après affichage complet.
  4. Disparition de la vue :
    • viewWillDisappear(_ animated: Bool): Appelé juste avant que la vue du contrôleur ne devienne invisible. Convient pour sauvegarder l'état ou arrêter des activités.
    • viewDidDisappear(_ animated: Bool): Appelé après que la vue du contrôleur n'est plus visible. Convient pour libérer des ressources ou arrêter des processus non nécessaires en arrière-plan.
  5. Changements de mise en page (Layout) :
    • viewWillLayoutSubviews(): Appelé avant que les vues du contrôleur ne changent de taille.
    • viewDidLayoutSubviews(): Appelé après que les vues du contrôleur ont changé de taille. Convient pour ajuster tailles et positions finales.
  6. Changements de traits (Trait CollectionDidChange) :
    • traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?): Appelé lors du changement des caractéristiques de l'environnement, telles que la taille de la classe, la densité d'écran, le mode clair/sombre, etc.
  7. Libération de mémoire (Désinitialisation) :
    • deinit: Appelé juste avant de libérer l'objet du contrôleur de la mémoire. Utilisé pour nettoyer les ressources, désabonner des notifications, etc.

Points importants :

  • Les méthodes loadView, viewDidLoad, viewDidAppear, viewWillDisappear, viewDidDisappear, deinit sont appelées une seule fois dans le cycle de vie de l'objet du contrôleur.
  • Les méthodes viewWillAppear et viewDidAppear peuvent être appelées plusieurs fois, par exemple lors de la navigation en avant et en arrière.

Exemple de séquence d'appels lors de la création et de l'affichage d'un contrôleur :

// Initialisation (si depuis Storyboard/Nib)
init?(coder aDecoder: NSCoder)

// Ou initialisation (si programmatique)
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)

// Chargement de la vue
loadView()
viewDidLoad()

// Apparition de la vue
viewWillAppear(true)
// ... la vue est devenue visible ...
viewDidAppear(true)

// Disparition de la vue (par exemple, lors de la navigation vers un autre VC)
viewWillDisappear(true)
// ... la vue n'est plus visible ...
viewDidDisappear(true)

// Libération de mémoire (lorsque plus aucune référence forte au contrôleur)
deinit