szukam ogólnych wskazówek, w jaki sposób obsłużyć tej sytuacji. Oto konkretny przykład.Co się stanie, jeśli klasa nie ma udokumentowanego wyznaczonego inicjatora?
Jestem podklasy UIImageView i chcę przesłonić initWithImage, aby dodać mój własny kod inicjalizacji po sam inicjalizacji klasy super z dostarczonego obrazu.
Jednak nie ma udokumentowane wyznaczony initializer dla UIImageView, który tak bardzo klasa initializer powinienem zadzwonić do zapewnienia mój podklasą jest właściwie zainicjowana?
Jeśli klasa nie wyznacza inicjator, prawda:
- Załóżmy, że jest to bezpieczne, aby wywołać dowolną (UIImageView) inicjalizatorów klasy za?
- Spójrz na super klasy (UIView) dla wyznaczonego inicjatora?
W tym przypadku wydaje # 1 będzie odpowiedź, jak ma to sens, aby wykonać następujące czynności w moim zastąpionej inicjatora:
- (id)initWithImage:(UIImage *)image
{
self = [super initWithImage:image];
if (self) {
// DO MY EXTRA INITIALIZATION HERE
}
return self;
}
Wydaje mi się to w porządku. Nazywasz inicjator klasy superklasy. Jaki jest problem? Objective-C nie zapewnia mechanizmu wywoływania inicjalizatora wyznaczonej superklasy. (AFAIK) –
UIImageView będzie twoją superklasą. Możesz wywołać (z 'super') dowolny poprawny inicjator tej klasy, w tym inicjatory, które mogą dziedziczyć (chociaż niektóre z nich mogą nie mieć sensu). –
To rzeczywiście działa dobrze, ale moje pytanie jest bardziej ogólne. Rozumiem, że podklasa powinna zawsze wywoływać inicjator super klasy, ale skąd mam wiedzieć, co oznacza inicjator, jeśli nie jest to udokumentowane? Czy można bezpiecznie wywoływać jakiekolwiek inicjatory w super klasie, jeśli nic nie jest oznaczone jako "wyznaczone"? – techsMex