为什么两个init函数都被调用

时间:2013-09-16 23:20:27

标签: ios objective-c cocoa-touch

如果我有一个像这样设置的类来自定义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两次
myView *aView = [[myView alloc]init]]; 

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

1 个答案:

答案 0 :(得分:7)

UIView init来电UIView initWithFrame:。由于您同时覆盖两者,因此调用init方法会导致调用initWithFrame:方法:

换句话说:您的init来电UIView initUIView init来电initWithFrame:。由于您覆盖initWithFrame:,系统会调用initWithFrame:,而UIView initWithFrame:会调用initWithFrame:

由于始终会调用foo,解决方案是从init方法移除对{{1}}的调用。