iOS - FMDB使用和内存

时间:2011-08-02 14:36:14

标签: objective-c ios sqlite fmdb

我一直在追踪iOS应用中的内存泄漏,并且我继续使用泄漏工具回到以下代码:

NSMutableArray *resultSet = [[NSMutableArray alloc] initWithCapacity:3];

NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc] init];

FMResultSet *rs = [db executeQuery:query,equipmentID];
while ([rs next])
{
    [resultSet addObject: [rs resultDict]];
}
[rs close];
[innerPool release];

return [resultSet autorelease];

这是正确的(在内存管理方面)FMDB的用法吗?以下是泄漏工具的屏幕截图:

leaks

泄漏的详细截图:

detail

2 个答案:

答案 0 :(得分:1)

是的,这是正确的内存管理。 [rs close];行在技术上是不必要的,因为当FMResultSet被释放时(作为池耗尽的一部分),它将发生(如果它还没有)。但是明确地把它放在那里很好。

您是否有可能过度保留返回数组?

答案 1 :(得分:0)

SQLite分配并保留一堆内存,只有在数据库关闭时才会释放。您还可以通过发出'pragma cache_size = nnn'命令来调整分配的内存量。

请参阅此相关问题和答案:

memory leak (?) after sqlite+fmdb vacuum command