2011-12-21 14 views
8

Ho fatto una sottoclasse di UIImageView e voglio aggiungere qualcosa per essere attivato ogni volta che io chiamo initWithFrame o initWithImage o Init ...initWithFrame: trigger init?

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

Se chiamo -initWithFrame: metodo, sarà il -init sopra essere attivato come bene?

risposta

8

Ogni classe dovrebbe avere un designated initialiser. Se UIImageView segue questa convenzione (dovrebbe, ma non l'ho ancora testata), scoprirai che chiamare -init finirà per chiamare -initWithFrame:.

Se si vuole garantire che il vostro metodo init viene eseguito, tutto quello che dovete fare è eseguire l'override del initialiser designata della classe genitore, o come questo:

-(id) initWithFrame:(CGRect)frame; 
{ 
    if((self = [super initWithFrame:frame])){ 
     //do initialisation here 
    } 
    return self; 
} 

O come questa:

//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 ma si prega di avviare i metodi di init con n 'init' per mantenere le convenzioni di denominazione. – JeremyP

+0

Whoops, sono troppo veloce per estrarre "foo" o "bar" o "myFunction" quando creo i nomi per la dimostrazione. –