奇怪的iphone sdk sqlite内存泄漏

时间:2009-11-19 18:08:58

标签: iphone memory sdk sqlite memory-leaks

我有一个非常奇怪的内存泄漏问题,似乎sqlite3_step正在做一些讨厌的事情:|

我花了差不多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,我想知道这是否会导致这种泄漏?!

非常感谢您的关注!

1 个答案:

答案 0 :(得分:2)

更新:嘿安迪,我错了。在Leaks中运行一些场景后,我开始更仔细地研究这个问题。看起来上游SQLite源的错误合并错过了两个寻呼机清理调用。该问题导致页面缓存在寻呼机关闭后保持分配状态。它可能不会影响大多数程序,但我仍然建议在http://github.com/sjlombardo/sqlcipher

下载从GitHub修复问题的最新源代码。