Почему я не получаю низкую память, пока изображения не будут нарисовать на экране?
-
04-10-2019 - |
Вопрос
Я могу загрузить более 200 объектов Uiimage в NSMutablebally без проблем предупреждающих памятников памяти.
Когда я начинаю отображать их на экране (после отображения 10-20 изображений) я получаю предупреждения с низкой памятью и возможным сбой.
Только около 8 изображений каким-либо раз отображаются.
Занимает ли дополнительную память, чтобы на самом деле нарисовать Uiimage на экране?
Утечки памяти не отображаются, и я много раз рассмотрел код для утечек.
Решение
То документация говорит, что имея UIImage
Не обязательно означает, что изображение на самом деле сохраняется в памяти, потому что он может быть очищен от кэша изображения. Но это говорит, что если вы попытаетесь нарисовать его, он будет вытянут обратно в память. Может быть, он начинает продувки от его кэша изображения, прежде чем предупреждает вас о состоянии низкой памяти. Это объясняет все, что вы видите.
Другие советы
Предположительно, что вы изначально создаете ссылку на изображение, единственные данные, которые фактически читают в это время, являются размерами и тип изображения (коротким), остальные данные обычно не требуются до запроса обычно из фонового процесса, т.е. на экране. Когда отображается фактические данные изображения загружаются из FilePath и декодированы в соответствии с его типом изображения, он затем кэшируется, чтобы он не должен быть загружен снова, кэширование требует много памяти плюс, если вы используете двойной / тройной Буферизация Существует дополнительная память, необходимая для выключения экрана. Попробуйте утилизировать все данные изображения перед загрузкой новых изображений.