2009-11-19 70 views
0

我有一个很奇怪的内存泄漏问题,似乎sqlite3_step做一些肮脏的东西:|奇怪的iPhone SDK的SQLite的内存泄露

我花了近4小时,试图解决这一问题,但没有运气至今:(

这是代码:

[dbList removeAllObjects]; 

sqlite3_stmt *statement = nil; 
const char *sql = "SELECT * FROM dbs ORDER by rowOrder;"; 
if (sqlite3_prepare_v2(dbHandler, sql, -1, &statement, NULL) == SQLITE_OK) 
{  
    while (sqlite3_step(statement) == SQLITE_ROW) 
    { 

     DatabaseEntry *entry = [[DatabaseEntry alloc] init]; 

     entry.databaseID = sqlite3_column_int(statement, 0); 
     entry.databaseTitle = [NSString stringWithFormat:@"%s", (char *)sqlite3_column_text(statement, 1)]; 
     entry.databaseProtected = sqlite3_column_int(statement, 3); 
     entry.databaseFileName = [NSString stringWithFormat:@"%s", (char *)sqlite3_column_text(statement, 2)]; 
     entry.databaseOrder = sqlite3_column_double(statement, 4); 

     [dbList addObject:entry]; 
     [entry release]; 
    } 

} 
sqlite3_finalize(statement); 

这个问题似乎是与我的查询,如果我删除“ORDER BY rowOrder”部分,似乎一切都只是罚款,还我使用sqlcipher,我不知道是否可能导致此泄漏?!

非常感谢您的关注!

回答

2

更新:嘿,安迪,我错了。运行泄漏中的一些场景后,我开始更加密切关注这一点。它看起来像来自上游SQLite源的错误合并错过了两个寻呼机清理调用。该问题导致页面缓存在分页器关闭后保持分配状态。或许,这将不会影响大多数程序,但我仍然会绝对推荐拉低,修复从GitHub问题在http://github.com/sjlombardo/sqlcipher

+0

嗯最新的源代码,这就是伟大的,知道了,谢谢! – Andy

+0

谢谢,我将抓住新的源代码! 非常感谢您的关注:) – Andy