Я создал приложение для Blackjack для iPhone. Когда он запускается, он занимает 70 МБ памяти. Это слишком высоко? Мне это кажется немного большим. Или это нормально, учитывая, что я использую графику/анимацию (для карт, чипов и т.д.).
Сколько памяти должно занимать приложение для iPhone?
Ответ 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
, такая память сохраняется, если только давление в памяти не указывает на необходимость делать иначе (и даже тогда все, что является частью текущей иерархии, должно сохранять свое хранилище).