2011-12-21 24 views
8

tôi đã thực hiện một lớp con của UIImageView và tôi muốn thêm một cái gì đó để được kích hoạt bất cứ khi nào tôi gọi initWithFrame hoặc initWithImage hoặc Init ...initWithFrame: init có kích hoạt không?

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

Nếu tôi gọi -initWithFrame: phương pháp, sẽ là -init trên được kích hoạt không?

Trả lời

8

Mọi lớp học có nghĩa vụ phải có designated initialiser. Nếu UIImageView tuân theo quy ước này (nó nên, nhưng tôi chưa thử nghiệm nó) thì bạn sẽ thấy rằng việc gọi -init sẽ kết thúc bằng cách gọi số -initWithFrame:.

Nếu bạn muốn đảm bảo rằng phương pháp init của bạn được chạy, tất cả các bạn phải làm là ghi đè lên initialiser định của lớp cha mẹ, hoặc là như thế này:

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

Hoặc như thế này:

//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 nhưng hãy bắt đầu các phương thức init của bạn bằng 'init' để giữ các quy ước đặt tên. – JeremyP

+0

Rất tiếc, tôi quá nhanh để rút ra "foo" hoặc "bar" hoặc "myFunction" khi tôi tạo tên để trình diễn. –

Các vấn đề liên quan