У меня утечки памяти 6 МБ, когда я работаю с sqlite.Сейчас я тестирую метод getBookWithIdTest.
-(IBAction) onTest:(id)sender
{
NSAutoreleasePool *myPool = [[NSAutoreleasePool alloc] init];
for (int i=0; i<100; i++)
{
[DatabaseManager getBookWithIdTest:i];
}
[myPool drain];
}
У меня 6 МБ утечки памяти.Но почему?
+ (BookSettings *)getBookWithIdTest:(int)abookId
{
BookSettings *book = [[[BookSettings alloc] init] autorelease];
sqlite3 *database;
if(sqlite3_open([DatabaseManager databasePath], &database) == SQLITE_OK)
{
sqlite3_stmt *compiledStatement;
//FIRST PART
const char *sqlStatementBook = [[NSString stringWithFormat:@"SELECT * FROM t_abooks"] cStringUsingEncoding:NSASCIIStringEncoding];
if(sqlite3_prepare_v2(database, sqlStatementBook, -1, &compiledStatement, NULL) == SQLITE_OK)
{
while(sqlite3_step(compiledStatement) == SQLITE_ROW)
{
}
}
else NSLog(@"sqlite3_prepare_v2 error %s", sqlite3_errmsg(database));
sqlite3_reset(compiledStatement);
//END FIRST PART
// SECOND PART
const char *sqlStatementAuthors = [[NSString stringWithFormat:@"SELECT * FROM t_authors"] cStringUsingEncoding:NSASCIIStringEncoding];
if(sqlite3_prepare_v2(database, sqlStatementAuthors, -1, &compiledStatement, NULL) == SQLITE_OK)
{
while(sqlite3_step(compiledStatement) == SQLITE_ROW)
{
}
}
else NSLog(@"sqlite3_prepare_v2 error %s", sqlite3_errmsg(database));
sqlite3_reset(compiledStatement);
//END SECOND PART
sqlite3_finalize(compiledStatement);
} else NSLog(@"sqlite3_open error");
sqlite3_close(database);
return book;
}
Но если я уберу ПЕРВАЮ или ВТОРОЙ ЧАСТЬ, у меня не будет утечек.Например
+ (BookSettings *)getBookWithIdTest:(int)abookId
{
BookSettings *book = [[[BookSettings alloc] init] autorelease];
sqlite3 *database;
if(sqlite3_open([DatabaseManager databasePath], &database) == SQLITE_OK)
{
sqlite3_stmt *compiledStatement;
//FIRST PART -removed
// SECOND PART
const char *sqlStatementAuthors = [[NSString stringWithFormat:@"SELECT * FROM t_authors"] cStringUsingEncoding:NSASCIIStringEncoding];
if(sqlite3_prepare_v2(database, sqlStatementAuthors, -1, &compiledStatement, NULL) == SQLITE_OK)
{
while(sqlite3_step(compiledStatement) == SQLITE_ROW)
{
}
}
else NSLog(@"sqlite3_prepare_v2 error %s", sqlite3_errmsg(database));
sqlite3_reset(compiledStatement);
sqlite3_finalize(compiledStatement);
} else NSLog(@"sqlite3_open error");
sqlite3_close(database);
return book;
}