8

サブクラスで両方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 の前に呼び出されるのはなぜですか?

4

3 に答える 3