Я часами пытался это исправить, но я просто сдался; Понятия не имею, что не так.
В моем приложении я выполняю вложенные операции SQL, чтобы правильно установить все мои объекты. По некоторым причинам, иногда объекты sqlite3 не выпускаются должным образом, в результате чего память поднимается вверх. Я понимаю, что это проблема с использованием корректно sql3_close и sql3_finalize. Однако, как вы увидите, я думаю, что использовал их правильно.
Вот источник проблемы:
- (NSArray *) getAllSessions {
if (sqlite3_open(dbPath, &db) == SQLITE_OK) {
if (sqlite3_prepare_v2(db, query_stmt, -1, &statement, NULL) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
//I found out that doing something like that
//toAdd.in_loc = [self getIndoorLocationWithId:[NSNumber numberWithInt:(int)sqlite3_column_int(statement, 6)]];
//messes the memory up all the time
//but doing that works OK:
NSNumber *_id = [[NSNumber alloc] initWithInt:(int) sqlite3_column_int(statement, 5)];
toAdd.out_loc = [self getOutdoorLocationWithId:_id];
[_id release];
//So I did the same with the second one, but this one messes memory up:
NSNumber *id2 = [[NSNumber alloc] initWithInt:(int)sqlite3_column_int(statement, 6)];
toAdd.in_loc = [self getIndoorLocationWithId:id2];
[id2 release];
}
sqlite3_finalize(statement);
}
sqlite3_close(db);
}
}
Итак, вот тот, который портит память:
- (IndoorLocation *) getIndoorLocationWithId:(NSNumber *) locId {
if (sqlite3_open([databasePath UTF8String], &db) == SQLITE_OK) {
if (sqlite3_prepare_v2(db, query_stmt, -1, &statement, NULL) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
//if I comment the thing below it works
NSNumber *_id = [[NSNumber alloc] initWithInt:(int) sqlite3_column_int(statement, 5)];
toReturn.outLoc = [self getOutdoorLocationWithId:_id];
[_id release];
}
sqlite3_finalize(statement);
}
sqlite3_close(db);
}
}
Так что в том, что портит память, я использую ту же функцию, что и в первый раз (getOutdoorLocationwithId), точно так же, но она не работает, объекты sqlite3 не освобождаются должным образом.
Надеюсь, вы понимаете мою проблему, это сводит меня с ума!