Progettare un inizializzatore designato con argomenti

In Objective-C il metodo standard per inizializzare un oggetto è certamente init. Se vogliamo, il metodo init può essere riscritto secondo le nostre esigenze. Possiamo infatti semplicemente reimplementarlo, sovrascrivendo il metodo originario, cioè quello ereditato dal padre della classe (che sia NSObject o qualche altro). Ma se ci serve un metodo di inizializzazione che accetti degli argomenti, siamo costretti a scriverne uno nuovo (ovviamente se non è già previsto dalla classe da cui ereditiamo). Ad esempio potremmo scrivere:
-(id)initWithFloat:(float)newFloat
{
[super init];
storedFloat = newFloat;
return self;
}
seguendo l’utile convenzione sui nomi che prevedere, in questo caso, di iniziare il nome del metodo con init, poi segnalare la presenza di uno o più argomenti con la parola With, ed infine scrivendo il nome del primo argomento. Dal secondo il poi si aggiungerebbe la congiunzione and.
Dal punto di vista progettuale, in questo modo l’oggetto della classe che contiene questo nuovo metodo è inzializzato con la variabile di istanza storedFloat impostata al valore dell’argomento. E possiamo allocare un’istanza della classe e inizializzarla con tanto di argomento, tutto in una sola riga di codice:
myNumber *aNumber = [[myNumber alloc] initWithFloat:4.92131];
Un problema nasce quando qualcun altro potrebbe usare ancora il metodo init che, essendo ereditato quantomeno da NSObject, non è eliminabile ma non inizializza l’oggetto come vorremmo.
La soluzione è aggiungere il metodo init nell’implementazione della nostra classe, in modo che vada a sovrascrivere il metodo ereditato, e scrivere
-(id)init
{
return [self initWithFloat:4.92131];
}
senza la necessità di richiamare [super init] dal momento che lo fa già initWithFloat.
Articoli che potrebbero interessarti
Ci sono delle voci di Wikipedia che ti interessano particolarmente e vorresti ricavarne un libro...
Sarà pure un prodotto rivoluzionario, conterrà pure la migliore tecnologia Apple, ma Newsday ha tr...
Apple ha appena rilasciato un importante aggiornamento di sicurezza, il quinto dall'inizio dell'...





