iOS - использование FMDB и памяти - PullRequest
2 голосов
/ 02 августа 2011

Я отслеживал утечки памяти в своем приложении для 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?Вот скриншот прибора с утечками:

утечки

Подробный скриншот утечки:

деталь

Ответы [ 2 ]

1 голос
/ 02 августа 2011

Да, это правильное управление памятью.Строка [rs close]; технически не нужна, потому что это произойдет (если это еще не произошло), когда FMResultSet будет освобожден (как часть осушения пула).Но поместить его туда явно хорошо.

Возможно ли, что вы чрезмерно сохраняете возвращаемый массив?

0 голосов
/ 02 августа 2011

SQLite выделяет и хранит кучу памяти, которая освобождается только при закрытии базы данных. Вы также можете отрегулировать, сколько памяти он будет выделять, введя команду «pragma cache_size = nnn».

См. Этот связанный вопрос и ответ:

утечка памяти (?) После вакуумной команды sqlite + fmdb

...