Когда мой пользовательский инициализатор не работает, я должен вернуть ноль.Каково соглашение для очистки памяти, выделенной мной в инициализаторе, которая, как я ожидал, будет очищена в dealloc?
Вот надуманный пример:
- (id)init
{
if ((self = [super init])) {
instanceVar1 = [[NSString alloc] initWithString:@"blah"];
if (bad_thing_oh_noes) {
return nil;
}
}
return self;
}
- (void)dealloc
{
[instanceVar1 release];
[super dealloc];
}
Aболее реалистичным обстоятельством, при котором я не могу эффективно проверить каждое состояние ошибки перед выполнением выделения, будет десериализация сложного объекта, содержащего массивы и т. п.
В любом случае, очищать ли выделенную память перед возвратом nil,отправьте сообщение dealloc самому себе перед возвратом ноля, или мне все это удалось волшебным образом?