ненормальное использование памяти iPhone в реальном устройстве - PullRequest
0 голосов
/ 21 июля 2011

У меня есть приложение на основе навигации, я отправляю uitableviews с помощью «init с именем nib».

Я тестировал приложение с инструментами, утечек нет, и в меню «Все выделения» я вижу живые байты около 2-3 МБ. Когда я начинаю навигацию и просматриваю 30 страниц, в «Инструментах» я вижу, что из «живых байтов» добавляется около 40 КБ для каждого отправляемого uitableview, что я считаю нормальным.

Затем я захотел проверить это на своем телефоне IOS4 и с помощью бесплатного приложения для мониторинга активности, которое я нашел в магазине приложений. Что ж, я вижу, что при каждом нажатии общая свободная память в устройстве уменьшается примерно на 800 КБ!

так что после 30 нажатий 28 МБ свободной памяти исчезли, и когда я «вернулся» через навигацию, я вижу, что память снова освобождается.

Я могу опубликовать некоторый код, если хотите, но я не смог найти то, что может занять 800 КБ памяти в моем uitableView, все ресурсы освобождаются, и я не выделяю файлы изображений. Я просто отправляю несколько строк информации для отображения в таблице.

Что вы предлагаете? какие части следует проверить в mycode? или это нормальные и выдвинутые представления могут занимать сотни килобайт памяти. потому что если в моем приложении 100 страниц, то оно может вырасти до 100 МБ памяти

Спасибо

1 Ответ

2 голосов
/ 21 июля 2011

Я совершенно уверен, что если вы проверите память в Instrument с помощью «Memory Tool» (см. Рисунок), вы увидите примерно то же использование памяти, что и при использовании бесплатного приложения iphone.

Действительно, по моему опыту, инструменты будут давать вам разную информацию об использовании памяти в зависимости от используемого вами инструмента; и, к сожалению, инструмент памяти - это тот, который дает наиболее «реалистичную» оценку. Я не могу объяснить, почему, но меня не удивляет, что на несколько МБ «живых байтов» у вас есть еще много МБ «реальной памяти».

Во всяком случае, я бы не беспокоился об этом. Если вы получаете 28 МБ и приложение не убито, возможно, вы используете «более поздние» устройства (не iPod touch и не iPhone 3); Я полагаю, что если вы тестировали на более старом устройстве, общая занятость памяти могла бы быть ниже (т. Е. Ваше приложение получало бы больше предупреждений о памяти, и если все было сделано правильно, больше просмотров было бы выгружено, освобождая больше памяти).

Что важно, IMO, это то, что когда вы возвращаетесь, память восстанавливается. В идеале это должно быть полностью восстановлено, но этого не всегда легко достичь.

enter image description here

Об общем потреблении памяти вашим приложением я думаю:

  1. Прежде всего, вы должны проверить, что происходит, когда ваше приложение получает предупреждение о памяти; Я ожидаю, что многие из ваших ранее загруженных просмотров будут выгружены и память восстановлена; вы можете переопределить didReceiveMemoryWarning в вашем контроллере, чтобы регистрировать, что они выгружены (не забудьте позвонить super) и восстановить память при необходимости (система будет знать, когда это произойдет); как я уже сказал, я полагаю, что ваше приложение заполняет память, потому что оно не получает никаких предупреждений о памяти, суть в том, что происходит при получении предупреждения о памяти; если память восстановлена, то нет проблем; проблема в том, что вы получаете предупреждение, и объем памяти значительно не уменьшается;

  2. Если проблема не устранена (т. Е. Механизм восстановления памяти не работает у вас должным образом), вы можете рассмотреть popping контроллеры представления с контроллера навигации, прежде чем выдвигать новые. Вы можете попробовать, если это работает для вас ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...