Lorsque vous travaillez avec des vues et des contrôleurs de vue dans une application iPhone, quelqu'un peut-il expliquer la différence entre loadView et viewDidLoad?
Mon contexte personnel, c'est que je construis toutes mes vues à partir du code, je n'utilise pas et n'utiliserai pas Interface Builder, si cela fait une différence.
J'ai constaté que souvent, lorsque j'ajoute du code d'initialisation à loadView, je me retrouve avec une trace de pile infinie, donc je fais généralement toute ma construction de vue enfant dans viewDidLoad ... mais je ne sais vraiment pas quand chacun est exécuté, et quel est l'endroit le plus approprié pour mettre le code d'initialisation. Ce qui serait parfait, c'est un simple diagramme des appels d'initialisation.
Merci!
la source
-(void) loadView { // Frame for Hypnosis view CGRect frame = [[UIScreen mainScreen] bounds]; // Create a Hipnosis view v = [[HypnosisView alloc] initWithFrame:frame]; self.view = v;
loadView
est la méthodeUIViewController
qui chargera réellement la vue et l'affectera à laview
propriété. C'est également l'emplacement qu'une sous-classe deUIViewController
remplacerait si vous vouliez configurer laview
propriété par programme.viewDidLoad
est la méthode qui est appelée une fois la vue chargée. Ceci est appelé après l'appel de loadView. C'est un endroit où vous pouvez remplacer et insérer du code qui effectue la configuration initiale supplémentaire de la vue une fois qu'elle a été chargée.la source
doit être utilisé lorsque vous chargez votre vue à partir d'un NIB et que vous souhaitez effectuer une personnalisation après le lancement
doit être utilisé lorsque vous souhaitez créer votre vue par programmation (sans utiliser Interface Builder)
la source
Il suffit d'ajouter quelques exemples de code pour montrer ce que NilObject a dit:
la source
Pour éviter qu'une boucle infinie ne se produise lorsque vous lisez self.view, appelez la super implémentation de la classe lorsque vous chargez une vue. La super implémentation vous attribuera un nouvel UIView.
la source
[super loadView];
. Cela a été contredit dans les exemples, mais je pense que la documentation l'a correctement dit (j'ai trouvé de nombreux bogues dans les exemples au fil du temps).[super loadView]
est cependant nécessaire pour UITableViewController, etc. Toutefois! Toute configuration après chargement (par exemple, l'ajout de sous-vues supplémentaires) doit être effectuée dans viewDidLoad.Le moyen le plus simple d'utiliser loadView est de créer un type de contrôleur de vue de base, comme MyBaseViewController qui est une sous-classe de UIViewController. Dans sa méthode loadView, créez une vue de cette manière:
Et lorsque vous avez besoin de créer un contrôleur de vue, vous utilisez simplement la sous-classe de MyBaseViewController et dans son contrôleur loadView, vous appelez simplement [super loadView] comme ceci
la source
loadView()
est appelé lorsque votre contrôleur est invité à créer son fichierself.view
. Vous pouvez le faire par vous-même commeOu la classe UIController parent de votre contrôleur a déjà un nom de méthode
-loadView()
qui initialise votre self.view en vue vide. Ensuite, vous pouvez appelerJe recommande vraiment la deuxième approche car elle encourage l'héritage. Uniquement si votre contrôleur de vue n'est pas directement hérité de UIViewController.
la source
La définition donnée par Apple sur viewDidLoad mentionne qu'elle est appelée après le chargement de la vue du contrôleur en mémoire. Pour le mettre en un terme simple, c'est la première méthode qui se chargera.
Vous vous demandez peut-être dans quelles conditions cette méthode sera-t-elle pleinement utilisée? La réponse est, en gros, tout ce que vous vouliez que l'application se charge en premier. Par exemple, vous voudrez peut-être une couleur d'arrière-plan différente, au lieu du blanc, vous pouvez peut-être choisir le bleu.
la source