2

我一直在跟踪我的 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 的正确使用(就内存管理而言)吗?这是泄漏仪器的屏幕截图:

泄漏

泄漏的详细截图:

细节

4

2 回答 2

1

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

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

于 2011-08-02T17:07:43.350 回答
0

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

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

sqlite+fmdb Vacuum 命令后的内存泄漏 (?)

于 2011-08-02T19:20:23.230 回答