Sobes.tech
Middle

Une instance de la vue est-elle créée immédiatement après la création du contrôleur?

sobes.tech IA

Réponse de l'IA

Non. L'instance de vue (view) pour un contrôleur de type UIViewController est créée de manière paresseuse, lors de la première fois que l'on accède à la propriété view.

UIKit ne crée pas la vue immédiatement après l'initialisation du contrôleur pour optimiser les ressources. La vue peut être visuellement complexe et nécessiter beaucoup de mémoire et de temps processeur pour sa création. En la créant de manière "paresseuse", uniquement lorsque cela est réellement nécessaire pour l'affichage à l'écran, le système économise des ressources.

Ce processus se produit, par exemple, lorsque le contrôleur est ajouté à la hiérarchie de vues d'un autre contrôleur ou fenêtre, ou lorsque sa propriété view est explicitement appelée. Si le contrôleur est initialisé, mais jamais affiché ou utilisé, sa vue ne sera pas créée.

Le cycle de vie du contrôleur et la création de la vue incluent les points clés suivants :

  1. init(coder:) ou init(nibName:bundle:) : Le contrôleur est initialisé, mais view est encore nil.
  2. La première fois que l'on accède à view : Si view est nil, le système appelle la méthode loadView().
  3. loadView() : Dans cette méthode vous (ou le système par défaut) créez la vue racine du contrôleur et l'assignez à la propriété view.
  4. viewDidLoad() : Cette méthode est appelée après que la vue a été chargée et assignée à la propriété view. C'est ici que la configuration des sous-vues, le chargement des données et d'autres actions dépendant de la présence de la vue sont généralement effectués.

Exemple de surcharge de loadView() :

override func loadView() {
    // Au lieu de charger depuis un Storyboard/XIB ou de créer une UIView vide
    // nous créons notre vue personnalisée
    let customView = CustomContentView()
    view = customView
    // Ici, view n'est plus nil
}

Il est important de se rappeler que, dans la majorité des cas, vous ne surchargerez pas directement loadView(), mais vous vous ferez confiance dans l'implémentation standard de UIKit, qui charge la vue depuis un Storyboard, un fichier XIB ou crée une UIView vide par défaut. Cependant, comprendre quand et comment la vue est créée est crucial.