След памяти NSDictionary и NSArray - PullRequest
2 голосов
/ 07 июня 2011

Проект, над которым я работаю, требует от меня временного хранения сотен, а иногда и тысяч записей в буфере. Самый простой способ - сохранить каждую запись в NSDictionary и все записи в NSArray. Каждый NSDictionary содержит около десятка объектов (NSStrings и NSNumbers). На протяжении всей операции NSArray со своими словарями остается в памяти, поэтому мой вопрос.

Является ли это дорогостоящей операцией с точки зрения использования памяти и как можно это проверить?

Ответы [ 2 ]

2 голосов
/ 07 июня 2011

Instruments содержит модуль мониторинга памяти.В левом нижнем углу инструментов нажмите на значок шестеренки, затем выберите «Добавить инструмент»> «Мониторинг памяти». Документация Apple должна помочь вам понять, как контролировать память с помощью инструментов.См. Также этот вопрос .

По моему опыту, NSDictionary и NSArray достаточно эффективны с точки зрения использования памяти.Я написал несколько приложений, которые хранят тысячи ключей / значений из файлов .csv или .xml, и при заполнении NSDictionary происходит довольно линейное увеличение использования памяти.Я советую использовать профилировщик инструментов в некоторых угловых случаях, если вы можете создать для них модульные тесты.

Я не уверен, что понимаю, почему вы храните записи как в NSDictionary, так и в NSArray.

Одна вещь, которую вы можете рассмотреть, если вы достигнете верхних границ использования памяти, - это преобразовать записи в базу данных SQLite, а затем проиндексировать столбцы, по которым вы хотите выполнить поиск.

РЕДАКТИРОВАТЬ: Не забудьте проверить этот вопрос , если вы хотите углубиться в понимание потребления памяти iPhone.

1 голос
/ 07 июня 2011

Классы коллекции Apple более эффективны, чем вы или я, я бы не стал беспокоиться о словаре с тысячами небольших записей, имейте в виду, что значения не копируются при добавлении в словарь, но ключи,Это, как говорится, только храните в памяти то, что вам нужно.

...