2011-12-21 9 views
8

zrobiłem podklasa UIImageView i chcę dodać coś być wyzwalany gdy zadzwonię initWithFrame lub initWithImage lub Init ...Czy initWithFrame: trigger init?

-(id) init { 
    [super init]; 
    NSLog(@"Init triggered."); 
} 

Jeśli zadzwonię -initWithFrame: metodę, będzie -init powyżej być wywołane także?

Odpowiedz

8

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; 
} 
+0

+1, ale proszę rozpocząć swoje metody init od 'init', aby zachować konwencje nazewnictwa. – JeremyP

+0

Ups, jestem zbyt szybki, aby wyciągnąć "foo" lub "bar" lub "myFunction", kiedy wymyślam nazwiska dla demonstracji. –