Sequence d'initialisation lors du lancement
skimpy
Membre
Bonjour,
Je souhaiterais faire le point sur la séquence d'initialisation lors du lancement d'une application :
1. Le fichier NIB est chargé (avec un envoi de alloc et init)
2. Chaque objet du fichier NIB reçoit un awakeFromNib
3. Boucle d'événement
4. L'application se termine
Dans le cas où on a qu'un seul fichier NIB, c'est facilement compréhensible. Maintenant, imaginons que nous ayons 2 fichiers NIB :
- Le 2ème fichier NIB a donc un File's Owner avec une classe Toto et une instance d'un objet Titi.
- Le init du 1er NIB alloue une instance de Toto avec le code :
et le init du 2ème fichier NIB contient :
Comment va fonctionner la séquence de lancement ?
1. Le 1er NIB est chargé ; il envoie un alloc, init
--> l'objet toto est donc instancié, ce qui a pour but de déclencher le initWithWindowNibName
2. L'instance Titi est créée ?
3. Le 1er NIB envoie un awakeFromNib ?
4. Le 2ème NIB envoie un awakeFromNib ?
Qu'en est-il des WindowDidLoad et des windowControllerDidLoadNib ?
Merci.
Je souhaiterais faire le point sur la séquence d'initialisation lors du lancement d'une application :
1. Le fichier NIB est chargé (avec un envoi de alloc et init)
2. Chaque objet du fichier NIB reçoit un awakeFromNib
3. Boucle d'événement
4. L'application se termine
Dans le cas où on a qu'un seul fichier NIB, c'est facilement compréhensible. Maintenant, imaginons que nous ayons 2 fichiers NIB :
- Le 2ème fichier NIB a donc un File's Owner avec une classe Toto et une instance d'un objet Titi.
- Le init du 1er NIB alloue une instance de Toto avec le code :
<br />toto = [[Toto alloc] init];<br />[toto showWindow:self];<br />
et le init du 2ème fichier NIB contient :
<br />self = [super initWithWindowNibName:@"2emeNIB"];<br />
Comment va fonctionner la séquence de lancement ?
1. Le 1er NIB est chargé ; il envoie un alloc, init
--> l'objet toto est donc instancié, ce qui a pour but de déclencher le initWithWindowNibName
2. L'instance Titi est créée ?
3. Le 1er NIB envoie un awakeFromNib ?
4. Le 2ème NIB envoie un awakeFromNib ?
Qu'en est-il des WindowDidLoad et des windowControllerDidLoadNib ?
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
De mon point de vue, on ne devrait jamais avoir à charger plusieurs .nib en même temps.
Si on le fait, on ne peut avoir aucune garantie concernant l'ordre des opérations
Dit autrement, tout ce qui doit être chargé à l'ouverture de l'appli doit se trouver dans le nib nommé par défaut mainMenu.nib et dont le file's owner est NSApplication.
Si ensuite on veut charger un autre nib dont le file's owner est la classe Toto, on peut faire, depuis la classe Toto:
Ce code essaie de charger le nib. Si la tentative echoue on n'insiste pas, sinon on continue.
Pour plus de détails regardes mon tuto #6