[NSBundle] Gestion du chargement des NIB
deftones_chrix
Membre
Bonjour à tous,
je me pose quelques questions sur le sujet du chargement des fichiers.nib
Dans un de mes projets, j'ai un bouton qui m'affiche une fenêtre lorsque je clique dessus (du grand classique ). Cette fenêtre étant indépendante de la fenêtre où se trouve le bouton (comme pour une meilleure organisation), j'ai mis cette fenêtre et tout ce qui la concerne dans un fichier .nib séparé.
J'ai fait le choix de charger le .nib lors du click sur le bouton avec ce code:
Et certaines questions m'assaillent :
je ne vois pas trop comment faire. Et je trouve cela moyen car rien ne m'assure que le fichier .nib ne sera pas chargé tout de même plusieurs fois (tout simplement dans des instances de classe différentes) ::) A l'exception d''utiliser une variable globale mais mes principes sont contre ce genre de chose
je me pose quelques questions sur le sujet du chargement des fichiers.nib
Dans un de mes projets, j'ai un bouton qui m'affiche une fenêtre lorsque je clique dessus (du grand classique ). Cette fenêtre étant indépendante de la fenêtre où se trouve le bouton (comme pour une meilleure organisation), j'ai mis cette fenêtre et tout ce qui la concerne dans un fichier .nib séparé.
J'ai fait le choix de charger le .nib lors du click sur le bouton avec ce code:
<br />if ([NSBundle loadNibNamed:@"nib2"] == NO) {<br /> // problème -> arrêt<br />} else {<br /> //chargement OK -> affichage de la fenêtre <br />}<br />
Et certaines questions m'assaillent :
-
Je pensais que la .nib n'était chargée seulement si elle n'était pas déjà en mémoire (un peu comme une .dll pour ceux qui connaissent Win). Or, en pratique ce n'est pas le cas. Il y a-t-il un moyen de savoir sur une .nib est déjà chargée ? car actuellement à part faire une variable statique du genre:
<br />static BOOL _dejaCharge = NO;<br /><br />if (!_dejaCharge ) {<br /> // chargement de la .nib<br /><br /> _dejaCharge = YES;<br />}<br />
je ne vois pas trop comment faire. Et je trouve cela moyen car rien ne m'assure que le fichier .nib ne sera pas chargé tout de même plusieurs fois (tout simplement dans des instances de classe différentes) ::) A l'exception d''utiliser une variable globale mais mes principes sont contre ce genre de chose
-
Une autre question est: quand est-ce que le fichier .nib se décharge ? En fait, je voudrais savoir si il y a un moyen de décharger un fichier .nib ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il est normal qu'un nib puisse être chargé autant de fois qu'on le lui demande.
les MyDocument.nib par exemple sont chargés pour chaque document et les objets sont instanciés pour chaque document. Et c'est bien comme ça.
Pour ton problème, pourquoi ne pas charger une fois pour toute la fenêtre que tu dois utiliser tout au long de ton appli dans la méthode délégate d'appli: applicationDidFinishLaunching ?
Par la suite, tu récupère auprès de ton délégate le pointeur sur la fenêtre.
Enfin, quand on clique sur ton bouton tu lui adresse un makeKeyAndOrderFront
sans oublier de régler ta fenêtre avec - setReleasedWhenClosed:NO afin qu'elle se cache mais ne soit pas désallouer à la fermeture.
Cette stratégie a l'avantage d'économiser les accès disques et le temps du désarchivage pour une fenêtre qui semble ici pouvoir être appelée souvent
Pour ma part je n'ai jamais eu l'occasion d'en avoir l'utilité
Posté sur un autre forum:
Donc dans ton cas, tu vérifies si l'outlet de ta fenêtre à été initialisé.