IMO, как правило, любой вид рисунка требует большой вычислительной мощности. Компоновка кэшированного растрового изображения с помощью графического процессора обходится намного дешевле, чем их повторное создание. Поэтому во многих случаях мы кэшируем все рисунки в растровое изображение, а в iOS за это отвечает CALayer
.
В любом случае, если ваши растровые изображения превышают лимит видеопамяти, Кварц не может объединить все слои одновременно. Следовательно, кварц должен рисовать один кадр на нескольких фазах. И это требует перезагрузки некоторых текстур в GPU. Это может повлиять на производительность. Я не уверен в этом, потому что iPhone VRAM, как известно, интегрирован с системной RAM. В любом случае, это правда, что над этим делом нужно больше работать. Если даже системной памяти становится недостаточно, система может удалить существующие растровые изображения и попросить перерисовать их позже.
CAShapeLayer
выполнит все работы CGContext
(я полагаю, вы имели в виду это) вместо вас. Вы можете сделать это самостоятельно, если почувствовали необходимость в более низкой оптимизации уровня.
Да. Очевидно, что все имеет ограничение по производительности. Если вы используете сотни слоев с большой альфа-смешанной графикой, это вызовет проблемы с производительностью. Во всяком случае, обычно этого не происходит, потому что составление слоев ускоряется с помощью графического процессора. Если линий вашего графика не так много, и они в основном непрозрачны, все будет в порядке.
Все, что вам нужно знать, это то, что после того, как графические рисунки скомпонованы, нет способа разложить их обратно. Поскольку сама композиция является своего рода оптимизацией путем сжатия с потерями, у вас есть только два варианта (1) перерисовать всю графику, когда требуется мутация. Или (2) Создайте кэшированное растровое изображение для каждого элемента отображения (например, линии графика) и просто составьте в соответствии с вашими потребностями. Это то, что делают CALayers.
Абсолютно слойный подход намного лучше. Любой вид рисования свободных форм (даже если он выполняется в графическом процессоре) требует гораздо большей вычислительной мощности, чем простая композиция растрового изображения (которая станет двумя текстурированными треугольниками) в графическом процессоре. Конечно, если ваши слои не превышают лимит видеопамяти.
Надеюсь, это поможет.