我有一个非常奇怪的内存泄漏问题,似乎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,我想知道这是否会导致这种泄漏?!
非常感谢您的关注!
答案 0 :(得分:2)
更新:嘿安迪,我错了。在Leaks中运行一些场景后,我开始更仔细地研究这个问题。看起来上游SQLite源的错误合并错过了两个寻呼机清理调用。该问题导致页面缓存在寻呼机关闭后保持分配状态。它可能不会影响大多数程序,但我仍然建议在http://github.com/sjlombardo/sqlcipher
下载从GitHub修复问题的最新源代码。