Почему CATextlayer использует так много памяти

  • У меня есть CATextLayer размером 3000 * 3000 с большим текстом в нем.
  • Текст говорит "Привет"
  • Я добавляю этот CATextlayer в свой Superlayer.
  • Я установил для параметра shouldrasterize значение false.

При перемещении суперслоя с переводом я наблюдаю огромное использование памяти, пока приложение не вылетает.

Почему это занимает так много памяти? Как я могу этого избежать?

Я предполагаю, что в памяти будет храниться растровое изображение? Но почему ?

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


person mcfly soft    schedule 22.01.2016    source источник


Ответы (1)


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

В iOS 2.x максимальный размер объекта UIView составляет 1024 x 1024 точки. В iOS 3.0 и более поздних версиях представления больше не ограничены этим максимальным размером, но по-прежнему ограничены объемом памяти, которую они потребляют. В ваших же интересах сделать так, чтобы размеры представлений были как можно меньше. Независимо от того, какая версия iOS работает, вам следует рассмотреть возможность размещения любого содержимого, которое значительно превышает размеры экрана.

person Shripada    schedule 22.01.2016
comment
Но я пытаюсь понять, почему он потребляет так много памяти. Конечно, я должен уменьшить размер, чтобы соответствовать. Это крайний образец того, что я описал. Я хотел бы понять, в чем причина. Это растровое изображение, хранящееся в памяти? Или что ? И правда ли, что когда я рисую простой текст, в конце получается растровое изображение. Я предполагаю, что это был бы упущенный дизайн от Apple, если бы CALayer, у которого есть много преимуществ, в итоге получился бы в виде растрового изображения. - person mcfly soft; 22.01.2016
comment
И вы делаете анимацию перехода, и помните, что во время анимации задействован слой представления, и все это вызовет огромный всплеск памяти. - person Shripada; 22.01.2016
comment
Нет, я не делаю анимации. Я просто перевожу UIView с его калайерами. - person mcfly soft; 22.01.2016
comment
Переходы — это только другой тип анимации. Так что у вас остается вся нагрузка обычной анимации. - person Shripada; 22.01.2016
comment
Но верно ли утверждение, что CATextlayer хранится в виде растрового изображения, даже если 90% пространства пусто в случае черного текста на пустом фоне? - person mcfly soft; 22.01.2016