ViewController init?

Я только что заметил, что мой ViewController не вызывает init (см. ниже), когда он запускается.

-(id)init {
    self = [super init];
    if(self) {
        NSLog(@"_init: %@", [self class]);
        otherStuff...
    }
    return self;
}

Есть ли причина для этого, или он заменен на viewDidLoad

-(void)viewDidLoad {
    otherStuff ..
    [super viewDidLoad];
}

cheers gary

Ответы

Ответ 1

Он не заменяется на viewDidLoad. Это просто, что init не вызывается initWithNibName:bundle:.

Я просто пишу свой установочный код в viewDidLoad.

Ответ 2

Если ваш контроллер представления инициализируется из раскадровки, вы можете использовать:

- (instancetype)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];
    if (self) {
        // do init here
    }
    return self;
}

Ответ 3

Обычно используется awakeFromNib.

Ответ 4

  • (void) init отлично работает, если вы создаете объект в коде, но вам нужно убедиться, что он тот, который вы вызываете. Не полезно извлекать шаблонное имя initWithNibName: bundle: method, а затем вызывать другое.