Помощь в поиске утечки памяти - PullRequest
1 голос
/ 12 мая 2010

Я пишу приложение для iPad, которое загружает довольно большой файл .csv и анализирует его в объектах, хранящихся в Core Data. Программа продолжает падать, и я запустил ее вместе с инструментом повышения производительности Allocations и вижу, что он потребляет память.

Ничего не выделено или не инициализировано в коде, так почему я поглощаю память?

Код: http://pastie.org/955960

Спасибо! -Neal

Ответы [ 2 ]

1 голос
/ 12 мая 2010

Уменьшается ли объем памяти после завершения цикла? Созданные и автоматически выпущенные объекты будут оставаться в цикле while. Возможно, вам придется поддерживать собственный пул авто-релизов с помощью NSAutoreleasePool.

0 голосов
/ 12 мая 2010

Нет утечек. Но вы выделяете новый массив и строку для каждого цикла, который будет накапливаться, когда ввод будет очень длинным, прежде чем пул авто-выпуска сможет истощиться.

while ( ![scanner isAtEnd] ) {
    BOOL insideQuotes = NO;
    BOOL finishedRow = NO;
    NSMutableArray *columns = [NSMutableArray arrayWithCapacity:10];
    NSMutableString *currentColumn = [NSMutableString string];

Поскольку это временные переменные, вы можете просто переместить их за пределы цикла и сбросить их на итерации.

NSMutableArray *columns = [NSMutableArray arrayWithCapacity:10];
NSMutableString *currentColumn = [NSMutableString string];
while ( ![scanner isAtEnd] ) {
    BOOL insideQuotes = NO;
    BOOL finishedRow = NO;
    [columns removeAllObjects];
    [currentColumn setString:@""];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...