Советы по оптимизации производительности при использовании множества объектов CALayer?

Моя архитектура/иерархия приложений выглядит так:

UIView
UIView
CALayer | CALayer | CALayer | CALayer .... (and a few hundred more)

Эти экземпляры CALayer представляют собой маленькие квадратные точки на точечно-матричном дисплее для быстрого обратного отсчета. Я обновляю их backgroundColor так часто, как только возможно. На самом деле я хочу 60 раз в секунду, но я думаю, что устройство не может этого сделать.

У меня есть таймер, который часто вызывает метод. Затем этот метод выполняет итерацию по этим слоям с точками пикселей и устанавливает для их backgroundColor значение, которое необходимо прямо сейчас.

Какие советы по оптимизации у вас есть для повышения производительности?

Одна вещь, которая приходит мне на ум:

1) Скажите каждому CALayer, что он непрозрачный!

Я думаю, что есть гораздо больше возможностей для оптимизации. Может быть, не плоская иерархия, как у меня, а очень глубокая, где каждый CALayer является подуровнем другого? Точно сказать не могу.


person Proud Member    schedule 14.10.2010    source источник


Ответы (1)


Не могли бы вы просто забыть о слоях и рендерить изображение в каждом кадре с помощью Quartz?

person zoul    schedule 14.10.2010
comment
Я думаю, что это очень медленно. Я пробовал что-то подобное раньше, и это оказалось очень плохо. -drawRect медленный, как 100-летняя улитка. - person Proud Member; 14.10.2010
comment
@BugAlert: вы действуете на основе предположений. Вернитесь к предложению @zoul и, если есть проблема, узнайте, в чем она заключается. Если это так медленно, одно прерывание и трассировка стека покажут вам проблему. - person Mike Dunlavey; 14.10.2010
comment
Я бы сказал, что рисование множества заполненных прямоугольников не может быть таким медленным. Но, как сказал Майк, в вопросах производительности вы должны сначала профилировать, а уже потом думать. В худшем случае вы можете перейти к OpenGL (если это возможно, учитывая остальную часть вашего приложения). - person zoul; 14.10.2010
comment
Из предыдущих экспериментов я знаю, что -drawRect: анимация очень медленная. - person Proud Member; 10.11.2010