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.