2010-10-14 2 views
1

Мое приложение архитектура/иерархия выглядит следующим образом:Советы по оптимизации производительности при использовании тонны объектов CALayer?

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

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

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

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

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

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

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

ответ

2

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

+0

Я думаю, что это очень медленно. Раньше я пробовал что-то подобное, и это оказалось очень плохо. -drawRect медленно, как 100-летняя улитка. –

+0

@BugAlert: Вы действуете на спекуляции. Вернитесь к предложению @ zoul и, если есть проблема, узнайте, что это такое. Если это так медленно, одна трассировка прерываний и стека покажет вам проблему. –

+0

Я бы сказал, что рисование пучка заполненных прямоугольников не может быть таким медленным. Но, как сказал Майк, в вопросах производительности вы должны сначала проработать и подумать обо всём. В худшем случае вы можете перейти на OpenGL (если это возможно, учитывая остальную часть вашего приложения). – zoul

Смежные вопросы