iPhone: Сколько памяти используется слишком много?

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

Я думаю, что в моем iPod touch есть хорошие 256 МБ, не совсем уверен, но я не знаю, сколько из них занято системными процессами, и сколько я могу безопасно использовать, прежде чем столкнусь с проблемами нехватки памяти. На данный момент моя программа занимает около 4 МБ, что кажется довольно большим для того, что она делает, но я предполагаю, что по крайней мере некоторые из них — это системные процессы, которые нельзя остановить, или требующие большого обслуживания вещи, такие как большой графический фон, который я с использованием.

Короче говоря, может ли кто-нибудь дать мне хороший контрольный показатель, к которому должны стремиться мои приложения с точки зрения максимального объема памяти, используемого в любой момент времени? Цифры для iPhone 4 и iPad тоже были бы хороши, если бы они существенно различались.

-Пепел


person Ash    schedule 18.08.2010    source источник
comment
Это довольно частый вопрос, как вы понимаете. В прошлый раз, когда это всплыло, я отдал свои пять копеек. Вот здесь: stackoverflow.com/questions/ 3448583/ограничение использования памяти на iPhone/   -  person Dan Ray    schedule 19.08.2010
comment
возможный дубликат Ограничение использования памяти на iPhone   -  person Brad Larson    schedule 19.08.2010


Ответы (2)


Трудного ответа нет. Есть несколько замечаний:

1) Если ваше приложение со временем использует все больше и больше памяти, оно будет уничтожено намного раньше, чем приложение, которое большую часть времени правильно освобождает память, но допускает несколько ошибок. Не забывайте, что существует сторожевой процесс, который имеет (на первый взгляд) сложную формулу для уничтожения приложений, и что разные приложения могут быть уничтожены на разных уровнях использования памяти по разным причинам.

2) В iPhone4 гораздо больше памяти, чем в предыдущих телефонах, НО, учитывая многозадачность пользователей, очень грубо просто идти в город с использованием памяти. С многозадачностью здесь важнее всего поддерживать низкий объем памяти (и это помогает, когда ваше собственное приложение находится в фоновом режиме, чем больше памяти используется, тем больше вероятность того, что оно будет уничтожено).

3) Серьезно относитесь к предупреждениям о памяти и сбрасывайте ВСЕ, что можете. Это позволит вашему приложению работать дольше и снова поможет ему дольше работать в фоновом режиме.

person Kendall Helmstetter Gelner    schedule 18.08.2010

Последние 2 дня я анализирую объем памяти моего последнего приложения и обнаружил интересный факт:

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

Если бы я перезагрузил свой телефон, он мог бы обрабатывать до 8 МБ в куче без каких-либо предупреждений. Я думаю, в iOS4 это также зависит от того, сколько вещей вы запускаете в фоновом режиме. У меня iOS 4.0.1 на iPhone4.

У iPad/iPhone 3GS 256 МБ, у iPhone4 512 МБ, однако это не означает, что все доступно для процесса. Я помню, в ранней iOS 3.0 одно из моих приложений было остановлено ОС на 32 МБ.

person bioffe    schedule 18.08.2010
comment
Это не освобождаемые автоматически освобождаемые объекты. Объекты с автоматическим освобождением освобождаются, когда освобождается или опустошается их пул автоматического освобождения. Основной пул сливается в конце текущего цикла выполнения, а не в ответ на предупреждения памяти. Скорее всего, вы видите освобождение представлений, которых больше нет на экране (стандартный ответ UIViewController в методе didReceiveMemoryWarning). Кроме того, если вы используете инструмент Memory Monitor, вы увидите, что истинный размер вашего приложения намного больше, чем выделенные вами 4,5 МБ. - person Brad Larson; 19.08.2010
comment
@Brad Вы абсолютно правы. Он освобождает просмотры. - person bioffe; 19.08.2010