Почему у меня не возникают проблемы с нехваткой памяти, пока на экране не появятся изображения?

Я могу загрузить более 200 объектов UIImage в NSMutableDictionary без каких-либо проблем с предупреждением о запоминании.

Когда я начинаю отображать их на экране (примерно после показа 10-20 изображений), я получаю предупреждения о нехватке памяти и возможный сбой.

Одновременно отображается только около 8 изображений.

Требуется ли дополнительная память, чтобы нарисовать UIImage на экране?

Утечек памяти не обнаруживается, и я много раз проверял код на предмет утечек.


person maxpower    schedule 27.05.2010    source источник


Ответы (2)


В документации говорится, что наличие UIImage не обязательно означает, что изображение действительно хранится в памяти, потому что оно может быть удалено из кеша изображений. Но он говорит, что если вы попытаетесь нарисовать его, он вернется в память. Возможно, он начнет очистку своего кеша изображений до того, как предупредит вас о нехватке памяти. Это объясняет все, что вы видите.

person sigfpe    schedule 27.05.2010
comment
Спасибо. Интересно, насколько активно очищаются внутренние данные объекта UIImage. Казалось бы, мои изображения, которые снимаются с экрана, будут очищены изнутри, и, хотя я могу получать предупреждения о памяти, я бы в конечном итоге не вылетел. - person maxpower; 27.05.2010

Вероятно, что вы изначально создаете ссылку на изображение, единственные данные, которые фактически читаются в это время, - это размеры и тип изображения (короче говоря), остальные данные обычно не нужны, пока не будут запрошены обычно из фонового процесса, т. Е. Отображаются на экране. Когда он отображается, фактические данные изображения загружаются из пути к файлу и декодируются в соответствии с его типом изображения, затем оно кэшируется, поэтому его не нужно загружать снова, кеширование занимает много памяти плюс, если вы используете двойной / тройной буферизация требуется дополнительная память для рисования вне экрана. Попробуйте удалить все данные изображения перед загрузкой новых изображений.

person Graham P    schedule 27.11.2010