4

UIViewをカスタマイズするためにこのように設定されたクラスがある場合。

@interface myView : UIView

- (id)init {
    self = [super init];
    if(self){
        [self foo];
    }
    return self;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        [self foo];
    }
    return self;
}


-(void) foo{
   //Build UIView here 
}

私が使用するかどうかにかかわらず、どうしてfooが2回呼び出されるのですか

myView *aView = [[myView alloc]init]]; 

また

myView *aView = [[myView alloc]initWithFram:aFrame]; 
4

1 に答える 1

8

UIView initを呼び出しますUIView initWithFrame:。両方をオーバーライドするため、メソッドを呼び出すと、メソッドが呼び出さinitれます。initWithFrame:

言い換えれば、あなたのinit呼び出しUIView initUIView initを呼び出しますinitWithFrame:。をオーバーライドするためinitWithFrame:、 yourinitWithFrame:が呼び出され、次に が呼び出されますUIView initWithFrame:

your は常に呼び出されるため、解決策はメソッドからinitWithFrame:への呼び出しを削除することです。fooinit

于 2013-09-16T23:27:08.190 に答える