これは、これまでの2つの質問から浮気しています。私はヒープショットを使ってApp Storeに提出する前に私の記憶がどうなっているのかを確認していますが、ユーザーがプログラムのループを完了するたびに3〜5KBずつ増加しています。私は抽選会に戻り、プログラムの大部分をコメントアウトし、徐々にセクションをオンラインに戻しました。私は問題の中心であると私が信じるものに絞り込むことができました。カスタムクラス+データベース呼び出しによりメモリが上昇しますか?
私は注意します:私はARCに変換しても同じ問題がありました。ここで(私が信じる)コードの関連分野です。
行クラス:
@interface Row : NSObject {
int rowID;
NSString *rowProblem;
NSString *rowAnswer;
int rowTimes_Right;
int rowTimes_Wrong;
Boolean marked;
}
@property (nonatomic) int rowID;
@property (nonatomic, copy) NSString *rowProblem;
@property (nonatomic, copy) NSString *rowAnswer;
@property (nonatomic) int rowTimes_Wrong;
@property (nonatomic) int rowTimes_Right;
@property (nonatomic) Boolean marked;
データベース機能(行を取得します):
-(Row *) getRow {
Row *holder = [[[Row alloc] init] autorelease];
//Pick a random problem to give to the User
int randomrow = (arc4random() % [self getNumberOfRows]) + 1;
NSString *querysql = [NSString stringWithFormat:@"SELECT * FROM problems WHERE id = %d", randomrow];
const char *sql = [querysql UTF8String];
sqlite3_stmt *statement;
//Execute the Query
if (sqlite3_prepare_v2(wordsDB, sql, -1, &statement, NULL) == SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
char *problem = (char *)sqlite3_column_text(statement, 1);
char *answer = (char *)sqlite3_column_text(statement, 2);
holder.rowID = sqlite3_column_int(statement, 0);
holder.rowProblem = [NSString stringWithUTF8String:problem];
holder.rowAnswer = [NSString stringWithUTF8String:answer];
holder.rowTimes_Right = sqlite3_column_int(statement, 3);
holder.rowTimes_Wrong = sqlite3_column_int(statement, 4);
holder.marked = sqlite3_column_int(statement, 5);
}
sqlite3_finalize(statement);
}
else
{
NSLog(@"SQL Error Message: %s", sqlite3_errmsg(wordsDB));
}
return holder;
}
ビューで一緒にそれをすべてを結びつける:
-(void)setToWord{
[currentRow release];
currentRow = [[dataB getRow] retain];
[problemLabel setText:currentRow.rowProblem];
[definitionLabel setText:currentRow.rowAnswer];
}
任意の考えをいただければ幸いです。
確かにヒープショットで何が増えていますか? – hooleyhoop
@hooleyhoopそれは、以前の質問(コールスタックのポストを含む)の特定の部分について尋ねましたが、誰もそれを解読できませんでした。 – ballofpopculture