プロジェクトのデータベース クエリを管理するクラスがあり、メモリ管理と[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 を使用したくありませんが、これまでのところ、このオブジェクトを返す方法と、静的アナライザーでこのエラーを取得しない方法がわかりません。何か助けてください。