Inicializador padrão em Objective-C

Substituir inicializadores no Objectice-C é sempre uma questão de perdão. Isso ocorre porque quando você herda a classe com a sua customizada, você precisa substituir TODOS os inicializadores, não há um único inicializador raiz.

Então, se você quiser definir algo dentro do inicializador, você deve encontrar todos eles e substituí-los. É assim que o Cocoa é construído, mas não acho que seja a melhor abordagem.

O que eu faço é sempre chamar [self init], [super init]em vez de inicializadores diferentes do próprio init .

Como isso:

- (instancetype) init
{
if (self = [super init]) {
// do some common work here
// self.string = @"Name"
}
return self;
}

- (instancetype) initWithString:(NSString *)string
{
if (self = [self init]) {
// do something, default value for self.string is set already
}
return self;
}

Eu realmente gosto desse padrão.