Допустим, я создаю новый класс для iPhone в Objective-C. В одном из моих методов инициализации я хочу вручную выделить часть памяти. Итак, у меня могло бы получиться что-то вроде этого:
- (id)initWithSomeObject:(SomeObject *)someObject {
self = [super init];
if (self != nil) {
myObject = someObject;
[myObject retain];
if ( (memory = calloc(1, sizeof(SomeStruct)) == NULL) {
// What should I do here to clean up
[self release];
self = nil;
}
}
return self;
}
Теперь, если предположить, что calloc () может дать сбой и что неспособность выделить память катастрофична для моего объекта, что мне делать внутри if-body, чтобы правильно очистить? Есть ли идиома или шаблон Objective-C, которые мне следует использовать?
Изменить: я включил код, опубликованный Робом Напьером. Но мне все равно нужно выпустить myObject, верно? Или добавленный код каким-то образом вызывает dealloc ()?