Запуск инструмента утечки говорит мне, что большая часть памяти используется объектами CFString, что, как я понимаю, связано с объектами NSString (хотя я не знаю, как)
NSString на самом деле является кластером классов.Хотя вы думаете, что работаете с NSStrings, вы почти наверняка работаете с одним из его подклассов.Каркас Какао выбирает, какой подкласс использовать в зависимости от обстоятельств.
CFString на самом деле вообще не NSString, это чистый строковый объект C, используемый Core Foundation .Тем не менее, вы обнаружите, что это "бесплатный звонок для NSString.Это означает, что для Какао это выглядит как строка NSString.Причина, по которой вы часто используете CFString, заключается в том, что любой API-интерфейс Cocoa, который вы используете для получения этих строк, в конечном итоге выполняет свою работу в Core Foundation.
В любом случае, все, что не имеет отношения к вашей проблеме, за исключением того факта, что множество строк CFString более или менее означает то же самое, что множество строк NSStrings.Чтобы уменьшить объем памяти, вам нужны вложенные пулы автоматического выпуска, как уже сказал Гириш.В качестве первого шага измените ваш алгоритм следующим образом:
- Создайте новый пул автоматического выпуска.
- Строковый анализ файла в NSMutableArray полностьюNSStrings
- После X числа строк импортируйте массив в Core Data (это включает манипулирование и, в некоторых случаях, создание новых NSStrings)
- [NSMutableArray removeAllObjects];
- истощить пул авто-релиза
- Промыть и повторить (начать с 0)
Если это не помогает или только помогает, рассмотрите возможность брекетинга только при разборес авто-релизным бассейном.