2010-03-14 5 views
2

InterfaceBuilder génère cette méthode pour moi fooAppDelegate.m:cycle de vie de l'application iPhone

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    // Override point for customization after app launch  

    [window addSubview:[navigationController view]]; 
    [window makeKeyAndVisible]; 
} 

IB met également UIWindow *window; dans fooAppDelegate.h et @synthesize window; dans fooAppDelegate.m, et en conséquence pour navigationController. IB génère du code pour libérer window et navigationController dans dealloc.

Je ne vois aucun code qui alloue et initialise le window et le navigationController. Je me demande où cela arrive.

Ari.

Répondre

6

À l'intérieur du fichier XIB, il y a du code qui instancie les objets qui y sont stockés. Par conséquent, l'instance UIWindow est un IBOutlet. Tout ce qui est IBOutlet est généralement instancié à partir du fichier XIB. Interface Builder n'est PAS un générateur de code, c'est une usine d'objets en direct.

« Interface Builder enregistre l'interface d'une application comme un paquet contenant les objets d'interface et les relations utilisées dans l'application. Ces objets sont archivés (un processus également connu sous le nom sérialisation ou de triage dans d'autres contextes) soit dans un fichier XML ou un fichier de liste de propriétés de style NeXT avec une extension .nib.Lors de l'exécution d'une application, les objets NIB appropriés sont désarchivés, connectés au binaire de leur application propriétaire et éveillés "

+0

Techniquement, le fichier XIB est juste des données Le code qui crée les objets à partir de la plume fait partie de UIKit. –

+1

@Mark, Techniquement tout est "juste des données" :) –

+0

Merci pour l'explication. Ce qui rend cette affaire "IB n'est pas un générateur de code" est que IB génère du code - y compris ce que je publie dans ma question initiale. – iter