调用不同的init方法

0xS*_*ina 2 cocoa-touch objective-c ios

我对此有点了解.我正在通过以下方式初始化UITableViewController子类CTSettingsVC:

CTSettingsVC *settingsVC = [[CTSettingsVC alloc] init];
Run Code Online (Sandbox Code Playgroud)

但是,initWithStyle正在调用初始化程序.这是我的m文件:

@interface CTSettingsVC ()

@end

@implementation CTSettingsVC

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        NSLog(@"Why is this called?")
        self.title = @"Settings";
    }
    return self;
}

@end
Run Code Online (Sandbox Code Playgroud)

我不确定这是否是预期的行为,或者我是否遗漏了某些东西.

Fru*_*eek 7

initWithStyle:是因为是指定的初始化器UITableViewController.看起来像这样的init方法UITableViewController:

- (instancetype)init
{
    //NOTE: self is being used instead of super
    return [self initWithStyle:UITableViewStylePlain];
}
Run Code Online (Sandbox Code Playgroud)

并非所有UIKit类都遵循这种覆盖init指定初始化程序的默认值的约定.如果我打算使用init默认的初始化程序来确保我的子类在未来版本的UIKit中不被破坏,我经常自己这样做.