我有一个类来管理我的项目的数据库查询,我在内存管理和[return autorelease]
部分代码方面遇到了一些问题。我不知道如何将对象返回给调用函数,但它会在之后使用它。代码是这样的:
-(Hexagram *)getHexagramforId:(NSInteger)hexagramNumber{
Hexagram *current;
if (init_statement == nil) {
const char * sql = "SELECT * FROM HEXNUMBER where _id =?";
if (sqlite3_prepare_v2(database, sql, -1, &init_statement, NULL) != SQLITE_OK) {
NSAssert1(0, @"Error:failed to prepare argument with message %s", sqlite3_errmsg(database));
}
sqlite3_bind_int(init_statement, 1, hexagramNumber);
if (sqlite3_step(init_statement) == SQLITE_ROW) {
current = [[Hexagram alloc]initWithId:hexagramNumber
Title:[NSString stringWithUTF8String:(char*)sqlite3_column_text(init_statement, HEX_TITLE)]
LongText:[NSString stringWithUTF8String:(char*)sqlite3_column_text(init_statement, HEX_TEXT)]ShortText:nil InternalColor:sqlite3_column_int(init_statement, INTERNAL_COLOR) ExternalColor:sqlite3_column_int(init_statement, EXTERNAL_COLOR)];
}else{
NSAssert1(0, @"Database is corrupt, error %s", sqlite3_errmsg(database));
}
sqlite3_reset(init_statement);
sqlite3_close(database);
init_statement = nil;
return current;
}
return nil;
}
所以在分析器中会发生什么,它说对象当前的六角星被泄露了,但是如果我用自动释放返回它,它就会崩溃。我想支持 iOS < 5 所以我不想使用 ARC 但到目前为止我不知道如何返回这个对象并且不会在静态分析器中得到这个错误。请问有什么帮助吗?