Come inizializzare una sottoclasse di un NSObject su iPhone?
-
03-07-2019 - |
Domanda
Voglio scrivere alcuni metodi in una classe in modo che altre classi possano chiamarli usando [nome metodo dell'istanza: parametro]
.
Se la classe è una sottoclasse di UIViewController
, posso usare initWithNibName
per inizializzarla. Ma voglio scrivere i metodi in una sottoclasse di NSObject , come posso inizializzarlo?
Soluzione 2
Trovo che possa funzionare:
TheClass *newObject = [[TheClass alloc] init];
//do something here
[newObject release];
Altri suggerimenti
iphony è corretto, ma lui o lei non dice che devi scrivere tu stesso il metodo init. Il tuo metodo init dovrebbe generalmente assomigliare a questo:
- (id) init
{
if (self = [super init])
{
myMember1 = 0; // do your own initialisation here
myMember2 = 0;
}
return self;
}
Anche se documentazione apple dice
Il metodo init definito nella classe NSObject non esegue l'inizializzazione; restituisce semplicemente sé.
e si può solo essere tentati di scrivere
- (id) init
{
myMember1 = 0; // do your own initialisation here
myMember2 = 0;
return self;
}
questo è SBAGLIATO e non segue quanto indicato esplicitamente nella documentazione:
In un'implementazione personalizzata di questo metodo (init), devi invocare i super inizializzatore designato quindi inizializza e restituisce il nuovo oggetto.
MUST. Non dovrebbe, potrebbe, dovrebbe, ecc.
Non dovresti assumere che init di NSObject non cambi in futuro; né la superclasse da cui deriva la tua classe personalizzata.