Мое приложение архитектура/иерархия выглядит следующим образом:Советы по оптимизации производительности при использовании тонны объектов CALayer?
UIView
UIView
CALayer | CALayer | CALayer | CALayer .... (and a few hundred more)
Эти экземпляры CALayer представляют собой небольшие квадратные точки в дисплей с точечной матрицей для быстрого обратного отсчета. Я обновляю их backgroundColor как можно чаще в секунду. Фактически я хочу 60 раз в секунду, но я думаю, что устройство не может этого сделать.
У меня есть таймер, который часто вызывает метод. Этот метод затем выполняет итерации по этим пиксельным точкам и устанавливает их backgroundColor на все, что необходимо прямо сейчас.
Какие советы по оптимизации вы должны улучшить производительность?
Одна вещь, которая приходит на ум:
1) Скажите каждый CALayer, что это непрозрачная!
Я предполагаю, что существует намного больше возможностей для оптимизации. Может быть, не плоская иерархия, как у меня, но очень глубокая, где каждый CALayer является подслоем другого? Не уверен.
Я думаю, что это очень медленно. Раньше я пробовал что-то подобное, и это оказалось очень плохо. -drawRect медленно, как 100-летняя улитка. –
@BugAlert: Вы действуете на спекуляции. Вернитесь к предложению @ zoul и, если есть проблема, узнайте, что это такое. Если это так медленно, одна трассировка прерываний и стека покажет вам проблему. –
Я бы сказал, что рисование пучка заполненных прямоугольников не может быть таким медленным. Но, как сказал Майк, в вопросах производительности вы должны сначала проработать и подумать обо всём. В худшем случае вы можете перейти на OpenGL (если это возможно, учитывая остальную часть вашего приложения). – zoul