back to top

Creare un menu per un’applicazione: il delegate – Guida Sviluppo App iOS

Come prima cosa andiamo a vedere il codice da inserire all’interno del delegate dell’applicazione. Partiamo dal file di header:

#import # <UIKit/UIKit.h>

@class Vista1ViewController;
@class Vista2ViewController;
@class Vista3ViewController;
@class MenuViewController;

@interface GuidaAppDelegate : NSObject <UIApplicationDelegate?>
 {
  UIWindow *window;
  Vista1ViewController *vista1ViewController;
  Vista2ViewController *vista2ViewController;
  Vista3ViewController *vista3ViewController;
  MenuViewController *menuViewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) Vista1ViewController *vista1ViewController;
@property (nonatomic, retain) Vista2ViewController *vista2ViewController;
@property (nonatomic, retain) Vista3ViewController *vista3ViewController;
@property (nonatomic, retain) MenuViewController *menuViewController;

@end
Come possiamo vedere, nella dichiarazione degli attributi è presente una dichiarazione della window (che era presente già all’atto di creazione del progetto) e poi viene creato un attributo per ogni ViewController. Prima della dichiarazione della classe abbiamo inserito il costrutto @class per ogni ViewController per avvisare il compilatore circa la presenza di questa classe. Per quanto riguarda le property non c’è molto da dire dato che hanno una sintassi uguale a quella che abbiamo visto precedentemente.

Spostiamoci adesso nel file di implementazione del delegate ed inseriamo tutti i synthesize degli attributi, dopodiché includiamo tutti i file header dei ViewController. Poniamoci poi nel metodo didFinishLaunchingWithOptions. All’interno del metodo inseriamo il seguente codice:

self.vista1ViewController = [[Vista1ViewController alloc] 
initWithNibName:@"Vista1" bundle:[NSBundle mainBundle]];

self.vista2ViewController = [[Vista2ViewController alloc] 
initWithNibName:@"Vista2" bundle:[NSBundle mainBundle]];

self.vista3ViewController = [[Vista3ViewController alloc] 
initWithNibName:@"Vista3" bundle:[NSBundle mainBundle]];
	
self.menuViewController = [[MenuViewController alloc] 
initWithNibName:@"Menu" bundle:[NSBundle mainBundle]];
	
[self.window addSubview:menuViewController.view];
[window makeKeyAndVisible];
    
return YES;
Al momento che l’applicazione verrà lanciata il delegate istanzierà tutti i ViewController allocandoli ed inizializzandoli con il file .xib creato precedentemente. Abbiamo anche stabilito che, all’apertura della nostra applicazione, verrà immediatamente visualizzato il nostro menu.

A questo punto ci potremo chiedere: perchè allocare immediatamente tutti i controller e non allocarli a run-time quando necessario? Dunque dal punto di vista dell’utilizzo della memoria sarebbe più corretto allocarli quando necessario, ma dal punto di vista pratico si preferisce compiere queste operazioni di allocazione ed inizializzazione al lancio dell’applicazione, questo in quanto è preferibile far attendere l’utente qualche secondo in più inizialmente piuttosto che durante l’uso dell’applicazione (che potrebbe apparire "poco fluida").

Come ultima cosa, ricordiamoci di inserire, nel metodo dealloc, il release per ogni attributo della classe.

Pubblicità

In questa guida...