Sto cercando indicazioni generali su come gestire questa situazione. Ecco un esempio specifico.Cosa succede se una classe non ha un inizializzatore designato come documento?
Sto sottoclassi UIImageView e voglio sovrascrivere initWithImage per aggiungere il mio codice di inizializzazione dopo aver avuto la stessa super classe stessa con l'immagine fornita.
Tuttavia, non esiste alcun inizializzatore designato per UIImageView, quindi quale inizializzatore di super classe dovrei chiamare per garantire che la mia sottoclasse sia inizializzata correttamente?
Se una classe non designa un inizializzatore, devo:
- Si supponga che è sicuro di chiamare uno dei (UIImageView) inizializzatori della classe?
- Guardare alla super classe (UIView) per l'inizializzatore designato?
In questo caso sembra # 1 sarebbe la risposta, come ha senso effettuare le seguenti operazioni nel mio initializer override:
- (id)initWithImage:(UIImage *)image
{
self = [super initWithImage:image];
if (self) {
// DO MY EXTRA INITIALIZATION HERE
}
return self;
}
Mi sembra buono. Stai chiamando l'inizializzatore della superclasse. Qual'è il problema? Objective-C non fornisce un meccanismo per chiamare l'inizializzatore di una superclasse designata. (AFAIK) –
UIImageView sarebbe la tua superclasse. Puoi chiamare (con 'super') qualsiasi inizializzatore valido di quella classe, inclusi gli inizializzatori che può ereditare (anche se alcuni di essi potrebbero non avere senso). –
Questo funziona davvero bene, ma la mia domanda è più generale. La mia comprensione è che una sottoclasse dovrebbe sempre chiamare l'inizializzatore designato della super-classe, ma come faccio a sapere qual è l'inizializzatore designato se non è documentato? È sicuro chiamare qualsiasi inizializzatore nella super classe se nulla è contrassegnato come "designato"? – techsMex