Я пишу рамки и у меня есть объект с методом пользовательского INIT:Вызов dealloc в init?
@implementation OSDatabase
@synthesize database;
// MEM
- (void)dealloc {
sqlite3_close(database);
[super dealloc];
}
// INIT
- (id)initWithDatabasePath:(NSString *)path error:(NSError **)error {
if (self = [super init]) {
if (!sqlite3_open_v2([path UTF8String], &database, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL)) {
error = [NSError errorWithDomain:@"OSDatabaseErrorDomain" code:1 userInfo:nil];
[self dealloc];
return nil;
}
}
return self;
}
@end
Безопасно позвонить dealloc
внутри из init
метода, если ошибка occoured? Я не уверен в этом, и управление памятью - одна из самых важных вещей в моей жизни.
Спасибо.
Как насчет 'while ([self retainCount]! = 0) {[self release];}'? –
@ Koning Baard: ** Нет! ** Это так же плохо. Я отредактирую свой ответ, чтобы объяснить, почему. – JeremyP
«Куча экскрементов» едва ли оправдывает то, как это неправильно ...:) – bbum