Как удалить подвиды UIView без перерисовки? - PullRequest
0 голосов
/ 18 сентября 2011

Это в некотором роде гипотетический вопрос, но я могу представить, что эта ситуация возникнет в какой-то момент в будущем: давайте на минуту предположим, что у меня есть причудливо сложная иерархия UIViews, которую мне нужно будет визуализировать только один раз.Давайте также предположим, что после отрисовки я больше не буду использовать информацию (UIImages, метки, пользовательские представления, координаты и т. Д.) Под родительским представлением.Вместо того чтобы сохранять их, идея состоит в том, чтобы освободить всю дополнительную память, которую они используют, при этом избегая перерисовки .Результат будет таким же, как рисование в буфере за пределами экрана и последующее его отображение на экране.Можно ли добиться этого, используя UIView / CGLayer прямо из коробки, или это единственный вариант для преобразования содержимого родительского CGLayer в UIImage?

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 18 сентября 2011

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

Я полагаю, что если у вас в иерархии столько представлений, то возникает так много проблем с производительностью, что сохранение нескольких байтов после перерисовки будет наименьшей из ваших проблем.

0 голосов
/ 18 сентября 2011

Я могу подумать о переопределении метода -(void)drawRect:(CGRect)rect;, отрисовывая его только один раз за кадром перед перемещением этого изображения на экран в соответствии с некоторым логическим флагом, но это может привести к чудовищным ошибкам и должно быть правильно определено. Другое дело, что это также может привести к переопределению -(void)layoutSubviews;, хотя это может быть перегрузка, если вы переопределите первый ...

...