Сбой приложения - распределение активных байтов достигает 20 МБ - PullRequest
0 голосов
/ 30 июля 2010

мое приложение для iphone имеет много кнопок (я создал вид календаря с кнопками), когда я запускаю его с помощью инструмента Leaks - утечек не обнаружено. Но почему-то Allocation Live Bytes достигает 21 МБ и приложение вылетает (когда кнопки нажимаются примерно 120 раз).

разве не используется система автоматического освобождения памяти ... если нет утечек, почему память продолжает увеличиваться? Любые идеи о том, как подойти к этой проблеме, будут оценены. спасибо.

я использую sqlite3 в своем приложении для загрузки (календарь - значения хранятся за 30 дней за раз) - который вызывает функцию getSingRecord 30 раз ... ниже приведен фактический код

-(void) insertRecordIntoTableNamed:
{

NSString *sql="Insert Statement......";

char *err;

if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
    sqlite3_close(db);
    NSAssert(0,@"Error updating table");
}

}

-(NSString *) getSingRecord: (NSString *) getStatement{

NSString *sql=getStatement;

sqlite3_stmt *statement;

NSString *fieldFlagI=@"0";

if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) {
    while (sqlite3_step(statement) == SQLITE_ROW) {
        char *fieldFlag=(char *) sqlite3_column_text(statement, 0);
        fieldFlagI=[[NSString alloc] initWithUTF8String:fieldFlag];
        //fieldFlagI=[NSString initWithUTF8String:fieldFlag];
    }
    sqlite3_finalize(statement);
}
//NSString *ffI=fieldFlagI;
//[fieldFlagI release]
return [fieldFlagI autorelease];
} 

Ответы [ 2 ]

1 голос
/ 30 июля 2010

Скорее всего, вы полагаетесь на пул автоматического выпуска, который никогда не сливается. Поскольку пул существует и сохраняет ваши объекты, инструменты не обнаруживают это как утечку памяти. И если вы никогда не осушите пул, все выделенные вами объекты останутся в живых даже после того, как с ними покончено.

0 голосов
/ 30 июля 2010

Утечки - это объекты, на которые никто не ссылается, но которые не освобождаются. Если вы держите объекты в структуре данных и держитесь за них, это не будет рассматриваться как утечка, но это проблема. Что вы делаете при нажатии кнопки?

ОБНОВЛЕНИЕ: на основе вашего кода

Не высвобождайте автоматически возврат - вы не всегда распределяете его (инициализируется как @ "0"), выпуск производится только при его выделении.

Но это не твоя утечка.

В while () каждый раз, когда вы выполняете цикл, вы пропускаете последний, который вы выделили - ваш оператор get определенно возвращает одну строку? Если да, то почему ()?

...