サブクラスで両方init
をオーバーライドすると、両方のメソッドが呼び出されることに気付きました。私のコードで明示的に呼び出されるのは1つだけですが:initWithFrame:
UIView
TestViewController.m:
@implementation TestViewController
- (void)viewDidLoad
{
[super viewDidLoad];
View1 *view1 = [[View1 alloc] init];
[self.view addSubview:view1];
}
@end
View1.m:
@implementation View1
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
NSLog(@"initWithFrame");
}
return self;
}
- (id)init
{
self = [super init];
if (self)
{
NSLog(@"init");
}
return self;
}
@end
コンソールは次のようになります。
2013-10-17 12:33:46.209 test1[8422:60b] initWithFrame
2013-10-17 12:33:46.211 test1[8422:60b] 初期化
initWithFrame が init の前に呼び出されるのはなぜですか?