我已经在我的iOS应用程序跟踪内存泄漏,我不断用泄漏仪器回来下面的代码:iOS版 - FMDB使用率和内存
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?这里是仪器泄漏的截图:
泄漏的详细截图:
感谢戴夫,是我过保在返回的数组。每个项目被UITableView单元格子类保留(通过一个合成的setter)。这些都在可重用的队列中,可能是我不明白队列的工作原理。 [详细](https://lh6.googleusercontent.com/-ZbnV40_WTrg/TjhOQKjBB4I/AAAAAAAAMtU/1tIUgWIT_MM/s800/leak2.jpg)查看泄漏截图,BaseCell setData方法是唯一没有发布的方法。如果我将[数据发布]添加到basecell上的dealloc,我会崩溃。任何关于为什么当它看起来通过设置者明显保留时会崩溃的想法? – Crake
吸烟枪原来是以下行:'while([rs next]) result = [rs resultDict]; } ....这是在细胞保存其数据后调用的,我相信这样的直接分配是一个坏主意,我将它改为'while([rs next]) result = [ result = [rs resultDict] copy]; }' – Crake
起初我同Crake有关复制字典的建议,但没有必要,因为fmdb已经在调用'copy'。 –