2010-05-27 1 views
1

Я могу загрузить более 200 объектов UIImage в NSMutableDictionary без каких-либо предупреждений об ошибках.Почему я не получаю проблемы с низкой памятью, пока изображения не будут нарисованы на экране?

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

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

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

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

ответ

0

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

+0

Спасибо. Интересно, как активно очищаются внутренние данные объекта UIImage. Казалось бы, что мои изображения, снятые с экрана, будут очищены внутренне, и даже если я могу получить предупреждения о памяти, я бы в конечном итоге не упал. – maxpower

1

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