如果我有一个像这样设置的类来自定义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];
答案 0 :(得分:7)
UIView init
来电UIView initWithFrame:
。由于您同时覆盖两者,因此调用init
方法会导致调用initWithFrame:
方法:
换句话说:您的init
来电UIView init
。 UIView init
来电initWithFrame:
。由于您覆盖initWithFrame:
,系统会调用initWithFrame:
,而UIView initWithFrame:
会调用initWithFrame:
。
由于始终会调用foo
,解决方案是从init
方法移除对{{1}}的调用。