Сколько памяти должно занимать приложение для iPhone?

Я создал приложение для Blackjack для iPhone. Когда он запускается, он занимает 70 МБ памяти. Это слишком высоко? Мне это кажется немного большим. Или это нормально, учитывая, что я использую графику/анимацию (для карт, чипов и т.д.).

Ответ 1

Менее сложные игры, чем у вас, например Tic Tac Toe, занимают около 10 МБ. Однако у вас есть анимация. Я предполагаю, что это 2D-анимация, поскольку 3D-игры занимают около 500 МБ, а более привлекательные - около 1 ГБ.

Не смотря на то, что делает код, он, кажется, находится в пределах допустимого диапазона для хорошего 2D-приложения Blackjack.

При этом было бы неловко смотреть на совет Apple по поводу снижения использования памяти приложения.

Ответ 2

Наблюдение: использование меньше памяти только ради этого не имеет никакого преимущества. Как получить 500 МБ неиспользуемой ОЗУ лучше, чем иметь 450 МБ?

В результате этого наблюдения общий механизм, используемый в iOS, составляет NSCache. Это [приблизительно] ассоциативная карта, которая будет содержать информацию о том, если или пока это не приведет к чрезмерному падению памяти. Эта же модель используется в более общем плане. Используйте то, что доступно, если до тех пор, пока это не приведет к тому, что кто-то еще станет проблемой. Вот почему существуют предупреждения о низкой памяти. Такие кеши используются как разработчиками, так и системой - например, для каждого вызова [UIImage imageNamed:].

Таким образом, помимо этого, это зависит от ваших активов, от того, как ваши взгляды упорядочены и куча других факторов.

Ретина iPhone 5S имеет разрешение 1136x640 пикселей. Так что около 2,8 МБ данных. Вы упоминаете анимацию: у вас достаточно много разных активов, чтобы добавить до 25 экранов анимации? Если это так, то 70mb.

Как насчет ваших взглядов? Вы держите много независимых взглядов? В каждом представлении есть CALayer, который при нормальных обстоятельствах означает отпечаток GPU. Как и в случае с NSCache, такая память сохраняется, если только давление в памяти не указывает на необходимость делать иначе (и даже тогда все, что является частью текущей иерархии, должно сохранять свое хранилище).