Если по какой-либо причине инициализация не удалась, вы должны освободить себя.Для исключения, которое может произойти в вашей инициализации, вам нужно добавить вас @try
@catch
в зависимости от ситуации, чтобы вы могли выпустить self
.
- (MyClass*) initWithX: (MyArgClass*) X {
if (self = [super init]) {
// initialize
if(myInitializationCodeFailed)
{
[self release];
return nil;
}
}
return self;
}
Обновление
Если возможно, что ваша инициализация не удалась, я бы не стал делать исключение из с в вашем коде инициализации.Если вы хотите предоставить звонящему информацию, я бы реорганизовал инициализатор для принятия NSError
, который будет возвращен.
- (MyClass*) initWithX: (MyArgClass*) X error:(NSError**)error {
Как указывает Алексей Шолик в комментариях, проверьте Обработка ошибки инициализации раздел выделения и инициализации объектов.