私はsqliteデータベースからいくつかの情報を読み込み、Achievementというクラスを初期化するメソッドを持っています。私がこのコードを分析すると、フィードバックが返されました。私はどこに間違っているのか本当に理解していません。なぜretvalオブジェクトが225行目にリリースされ、229行目のreturn文には公開されていませんか?iOS - オブジェクトがautoreleaseを何度も送信しました
私は以下のコードでどこで間違いを犯したのか、どうすれば修正できるのか説明していただけますか?
ファンクションコード(SO回答を容易にコピーすることができ/ペースト):
- (Achievement *)getAchievement:(int)Id
{
Achievement *retval = [[Achievement alloc] autorelease];
NSString *query = [NSString stringWithFormat:@"SELECT * FROM Achievements where ID = %d", Id];
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, nil)
== SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
int Id = sqlite3_column_int(statement, 0);
char *name = (char *) sqlite3_column_text(statement, 1);
char *title = (char *) sqlite3_column_text(statement, 2);
char *description = (char *) sqlite3_column_text(statement, 3);
Boolean Achieved;
char *com = (char *) sqlite3_column_text(statement, 4);
NSString *c1 = [[[NSString alloc] initWithUTF8String:com] autorelease];
Achieved = [c1 isEqualToString:@"1"];
NSDate *CompletedDate = (NSDate *) sqlite3_column_text(statement, 5);
char *icon = (char *) sqlite3_column_text(statement, 6);
int New = sqlite3_column_int(statement, 7);
NSString *Title = [[[NSString alloc] initWithUTF8String:title] autorelease];
NSString *Description = [[[NSString alloc] initWithUTF8String:description] autorelease];
NSString *Name = [[[NSString alloc] initWithUTF8String:name] autorelease];
NSString *Icon = [[[NSString alloc] initWithUTF8String:icon] autorelease];
retval = [retval initDetails:Id :Name :Title: Description : Achieved : CompletedDate: Icon: New];
}
sqlite3_finalize(statement);
}
return retval;
}
分析フィードバック画像:いつものように
任意フィードバック大変感謝しています。
ありがとうございましたMaxは、一度だけ繰り返し処理されます(SQLでは1行しか返されません)。 dbコールから返された値がそこで利用できるので、私はループでそれを初期化します。どのように私は機能を並べ替えることをお勧めしますか? – MattStacey