Sequence d'initialisation lors du lancement

skimpyskimpy Membre
07:44 modifié dans API AppKit #1
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 :
<br />toto = [[Toto alloc] init];<br />[toto showWindow:self];<br />


et le init du 2ème fichier NIB contient :
<br />self = [super initWithWindowNibName:@&quot;2emeNIB&quot;];<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.

Réponses

  • WIMPWIMP Membre
    07:44 modifié #2
    C'est une bonne question, mais un peu (beaucoup) complexe. Impossible d'y répondre exhaustivement en quelques lignes.
    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:
    <br />if (![NSBundle loadNibNamed:@&quot;seconNib.nib&quot; owner:self] )<br />&nbsp;  return<br />
    

    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
Connectez-vous ou Inscrivez-vous pour répondre.