2011-12-21 11 views
8

Hice una subclase de UIImageView y quiero añadir algo que se activará cada vez que llamo initWithFrame o initWithImage o Init ...Will initWithFrame: trigger init?

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

Si llamo -initWithFrame: método, será el -init por encima de ser activado también?

Respuesta

8

Se supone que todas las clases tienen un designated initialiser. Si UIImageView sigue esta convención (debería, pero no lo he probado), entonces encontrará que llamar al -init terminará llamando al -initWithFrame:.

Si desea asegurarse de que se ejecuta el método init, todo lo que tiene que hacer es anulan el inicializador designado de la clase padre, ya sea como esto:

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

O así:

//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 pero por favor inicie sus métodos init con 'init' para cumplir con las convenciones de nomenclatura. – JeremyP

+0

Vaya, soy demasiado rápido para sacar "foo" o "bar" o "myFunction" cuando estoy inventando nombres para la demostración. –