我一直在追踪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的用法吗?以下是泄漏工具的屏幕截图:
泄漏的详细截图:
答案 0 :(得分:1)
是的,这是正确的内存管理。 [rs close];
行在技术上是不必要的,因为当FMResultSet
被释放时(作为池耗尽的一部分),它将发生(如果它还没有)。但是明确地把它放在那里很好。
您是否有可能过度保留返回数组?
答案 1 :(得分:0)
SQLite分配并保留一堆内存,只有在数据库关闭时才会释放。您还可以通过发出'pragma cache_size = nnn'命令来调整分配的内存量。
请参阅此相关问题和答案: