не удалось выделить 4 буфера по 20 МБ памяти в приложении на ios 4, но смог в ios 3

Я написал приложение, скомпилированное для iOS 3, которое легко выделяло до 100 МБ памяти для целей обработки изображений. Однако, когда это же приложение было скомпилировано для ios 4 sdk, я обнаружил, что оно аварийно завершает работу, когда многие приложения открыты в фоновом режиме. Когда я убиваю фоновые приложения, приложение работает нормально. Я уменьшил использование памяти до 70 МБ, и я все еще обнаруживаю, что он вылетает, когда открыто много фоновых приложений.

Почему приложения, скомпилированные для iOS 3, могут получить больше памяти на телефонах с iOS 4?? Есть ли что-то особенное, что вам нужно сделать, чтобы сообщить операционной системе ios 4, чтобы она предоставила вам больше памяти? Есть ли способ закрыть фоновые приложения, чтобы выделить больше памяти для вашего приложения?

Кстати, приложение в некоторой степени использует Core Graphics. Повлияет ли это на способность приложений запрашивать память?


person ConvexCoder    schedule 25.08.2010    source источник


Ответы (2)


Судя по вашему описанию, ваше приложение выдвигало границы выделения памяти в iOS 3.x, но зашло слишком далеко в 4.x, вероятно, из-за того, что более новая операционная система использует больше памяти.

Единственное решение — использовать меньше памяти. Это действительно настолько просто. Вы не можете контролировать, сколько памяти базовая ОС будет использовать для запуска процессов. Единственное, что вы можете контролировать, — это ваше приложение и объем памяти, который вы выделяете, чтобы избежать сбоя.

person Shaggy Frog    schedule 25.08.2010
comment
Тем не менее, приложение, скомпилированное для iOS 3 и запущенное на телефоне с iOS 4, похоже, может выделить больше памяти. Как версия приложения SDK может повлиять на объем выделяемой памяти? - person ConvexCoder; 25.08.2010
comment
Возможно, вы захотите задать этот вопрос на официальном форуме поддержки разработчиков Apple, так как здесь немного больше шансов, что инженер Apple увидит его и ответит. Но я все еще думаю, что вы выбрали неправильный подход. Возможно, вы сможете заставить его выделить всю эту память на 4.0.2, но кто сказал, что он не подведет на 4.1? Или 4.1.1? Если вы хотите быть уверенным в будущем, вам придется максимально сократить выделение памяти. - person Shaggy Frog; 25.08.2010

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

Расскажите нам больше о том, как вы выделяете эту память. Обращаете ли вы внимание на предупреждения о нехватке памяти?

person Mike Abdullah    schedule 30.10.2010