утечки памяти, появляющиеся после многократной загрузки - PullRequest
0 голосов
/ 26 января 2010

У меня есть, по крайней мере для меня, странный случай: у меня есть относительно простая программа, которая загружает XML-файл из Интернета, анализирует его и записывает данные в массив словарей. Каждый словарь представляет строку в таблице. Программа работает нормально, и если я присоединяю свой симулятор к инструментам и загружаю список, утечка памяти отсутствует.

Теперь вот странная часть: есть кнопка для пользователя, чтобы перезагрузить список. Если вы нажмете на нее, предыдущие данные будут очищены, XML снова загружен и проанализирован и так далее. Если я нажму эту кнопку, я все еще не могу найти утечку памяти. И все же, если я нажму на нее дважды, вдруг начнут протекать все вокруг. Я очень озадачен, почему вдруг возникают утечки, которых раньше не было (утечки появляются, только если один и тот же код запускается дважды)? Это особенно странно, поскольку я использую часть примера XMLParser от Apple, мой код является их копией 1: 1, но когда я запускаю парсер дважды, инструменты сообщают об утечке в этом коде.

Я рад любой помощи, я почти не знаю, как об этом. Код должен быть в порядке. Я уже пробовал "Построить и проанализировать", он не обнаружил ничего, чего бы я не увидел в инструментах.

Всего наилучшего, Робин

Ответы [ 2 ]

1 голос
/ 26 января 2010

Здесь действительно недостаточно информации, чтобы дать твердый ответ.

Тем не менее, звучит так, как будто вы неправильно истолковали результаты используемого вами средства обнаружения утечек памяти. Если он сканирует граф объектов в поисках осиротевших объектов, он может не заметить, что объект осиротел, пока вы не перезагрузите его. Это связано с тем, что в одной из сторонних библиотек, которые вы используете (или в своем собственном коде), может быть статическая кэшированная ссылка на корень графа объектов. После повторной загрузки кэшированная ссылка перемещается в Новый корневой объект и все старые объекты больше не упоминаются никакими корневыми переменными (локальными переменными в стеке вызовов или статическими переменными), поэтому они осиротевшие и «утечка».

0 голосов
/ 26 января 2010

Программа отлично работает и если я приложу мой симулятор для инструментов и загрузки В списке нет утечки памяти.

Это не значит, что у вас есть нет утечек - инструменты могут не ловить их - он производит выборку каждые н / секунды.

...