awakeFromNib
est-il appelé juste après que viewController soit alloué et initialisé? À quel moment précis le awakeFromNib
d'un contrôleur de vue est-il appelé? De ma session de débogage, je vois que awakeFromNib
pour le rootViewController n'est pas appelé avant que [self.window makeKeyAndVisible]
est exécuté.
awakeFromNib
est appelé après que la vue et ses sous-vues ont été allouées et initialisées. Il est garanti que la vue aura toutes ses variables d'instance de sortie définies.
EDIT: Un récit détaillé des événements:
Pendant le processus d'instanciation, chaque objet de l'archive est désarchivé puis initialisé avec la méthode adaptée à son type. Les vues Cocoa (et les vues personnalisées qui peuvent être personnalisées à l'aide d'une palette Interface Builder associée) sont initialisées à l'aide de leur méthode initWithCoder :. Les vues personnalisées sont initialisées à l'aide de leur méthode initWithFrame :. Les classes personnalisées qui ont été instanciées dans la nib sont initialisées à l'aide de leur méthode init.
Une fois que tous les objets ont été instanciés et initialisés à partir de l'archive, le code de chargement de la nib tente de rétablir les connexions entre les prises de chaque objet et les objets cibles correspondants. Si vos objets personnalisés ont des prises, un objet NSNib tente de rétablir toutes les connexions que vous avez créées dans Interface Builder. Il commence par essayer d’établir les connexions en utilisant d’abord les propres méthodes de votre objet. Pour chaque prise nécessitant une connexion, l'objet NSNib recherche une méthode de la forme setOutletName: dans votre objet. Si cette méthode existe, l'objet NSNib l'appelle, en passant l'objet cible en tant que paramètre. Si vous n'avez pas défini de méthode de définition avec ce nom exact, l'objet NSNib recherche dans l'objet une variable d'instance (de type IBOutlet id) avec le nom de sortie correspondant et essaie de définir sa valeur directement. Si une variable d'instance avec le nom correct est introuvable, l'initialisation de cette connexion ne se produit pas. Enfin, une fois tous les objets complètement initialisés, chacun reçoit un message awakeFromNib.
EDIT 2 : Cela ne s'applique pas aux contrôleurs de vue chargés à partir de storyboards.