Могу ли я использовать contentScaleFactor для безопасного сохранения памяти? - PullRequest
2 голосов
/ 06 марта 2012

У меня есть приложение, частью которого является отображение сетки изображений.Каждый ImageView имеет размер 200x150, но сами изображения имеют размер 1024x768.Если я попытаюсь просто установить эти изображения, я скоро получу предупреждения о памяти и, возможно, даже погибну.

С другой стороны, если изменение размера этих изображений в коде очень затратно для процессора и займет много времени.

Теперь я посмотрел одно из видео сеанса «Apple WWDC», и тот парень упомянул contentScaleFactor из UIView, который отвечает за объем фактической растровой памяти, выделенной для отображения представления.

В документации упоминаются только случаи, когда коэффициент масштабирования больше единицы, но мне важно установить его значение меньше единицы:

// Make sure not to divide by zero
if (image.size.width > 0 && image.size.height > 0)
{
    CGFloat widthRatio = self.imageView.frame.size.width / image.size.width;
    CGFloat heightRatio = self.imageView.frame.size.height / image.size.height;
    CGFloat aspectFitRatio = MAX(widthRatio, heightRatio);
    aspectFitRatio = MIN(1, aspectFitRatio);
    [self.imageView setContentScaleFactor:aspectFitRatio];
}

Таким образом, мой imageView выделит гораздо меньше памяти.

Мой вопрос - я прав?это действительно спасет память?Это даже "законно", чтобы установить для contentScaleFactor значения <1? </p>

Спасибо!

1 Ответ

0 голосов
/ 06 марта 2012

Боюсь, это не поможет сильно .Дело в том, что UIView сохраняет изображение независимо от его размера.Таким образом, пока представление существует, изображение занимает оперативную память.contentScaleFactor не меняет этот факт.Для того чтобы реально уменьшить объем памяти, необходимо повторно сэмплировать изображения, прежде чем назначить их для UIView.

. Однако contentScaleFactor влияет на размер резервного хранилища, используемого для рендеринга.Учитывая, что на данный момент есть только две категории устройств iOS, и эти устройства используют масштабный коэффициент 1.0 или 2.0, вы можете просто заставить contentScaleFactor быть равным 1.0 на устройствах Retina.Обратите внимание, что он не будет ничего делать для других устройств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...