Każda klasa powinna mieć numer designated initialiser. Jeśli UIImageView
postępuje zgodnie z tą konwencją (powinno, ale nie przetestowałem jej), wówczas przekonasz się, że wywołanie -init
zakończy się wywołaniem -initWithFrame:
.
Jeśli chcesz się upewnić, że metoda init uruchomić, wszystko co musisz zrobić, to zastąpić wyznaczonego initialiser klasy dominującej, albo tak:
-(id) initWithFrame:(CGRect)frame;
{
if((self = [super initWithFrame:frame])){
//do initialisation here
}
return self;
}
Albo tak:
//always override superclass's designated initialiser
-(id) initWithFrame:(CGRect)frame;
{
return [self initWithSomethingElse];
}
-(id) initWithSomethingElse;
{
//always call superclass's designated initializer
if((self = [super initWithFrame:CGRectZero])){
//do initialisation here
}
return self;
}
+1, ale proszę rozpocząć swoje metody init od 'init', aby zachować konwencje nazewnictwa. – JeremyP
Ups, jestem zbyt szybki, aby wyciągnąć "foo" lub "bar" lub "myFunction", kiedy wymyślam nazwiska dla demonstracji. –