2011-12-21 16 views
8

Ben UIImageView bir alt sınıfı yapılmış ve ben initWithFrame veya initWithImage veya Init istediğim zaman tetiklenebilir bir şey eklemek istiyorum ...Will initWithFrame: trigger init?

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

ben -initWithFrame: yöntemini çağırırsanız, -init yukarıda yanı tetiklenecek?

cevap

8

Her sınıfın designated initialiser olması gerekir. UIImageView bu kuralı izlerse (ancak bunu test etmedim), -init numaralı telefonun -initWithFrame: numaralı telefonu arayacağını öğreneceksiniz. Eğer init metodu çalıştırılır sağlamak istiyorsanız

, yapmanız gereken tek şey, ya böyle, ebeveyn sınıfın belirlenen Başlatıcı geçersiz olduğu:

//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; 
} 
:
-(id) initWithFrame:(CGRect)frame; 
{ 
    if((self = [super initWithFrame:frame])){ 
     //do initialisation here 
    } 
    return self; 
} 

Ya da böyle

+0

+1 ancak adlandırma kurallarına uymak için lütfen init yönteminizi init 'init ile başlatın. – JeremyP

+0

Whoops, gösteri isimleri oluştururken "foo" veya "bar" veya "myFunction" u çekmek için çok hızlıyım. –