Ответ 1
Если какая-либо проверка, которая вам нужна в вашем методе инициализации, терпит неудачу, то да, вы должны освободить self
. Обратите внимание, однако, что если [super init]
возвращает nil
, нет смысла отправлять release на self
, поскольку self
is nil
. Это на самом деле нахмурило Apple:
Вы должны вызывать только
[self release]
в момент сбоя. Если вы возвращаетеnil
обратно из вызова инициализатора суперкласса, вы также не должны называтьrelease
.
Пример:
- (id)init
{
self = [super init];
if(self) {
// do some init stuff
if (somethingFailed)
{
[self release]
self = nil;
}
}
return self;
}
Также см. документацию Mac Dev Center Обработка отказа инициализации