Вопросы про drawRect в iOS - PullRequest
0 голосов
/ 24 мая 2011

Вот в чем дело: у меня есть представление, которое содержит сложный контент, который необходимо перерисовать после обновления связанных данных.Я использую несколько представлений для реализации этого, более вероятно, что одно большое представление содержит несколько подпредставлений, и каждое подпредставление может также иметь несколько подпредставлений.Все эти представления переопределяют свой собственный метод drawRect:.

Вопрос в том, что сложное представление требует большого объема памяти, и я хочу знать, почему drawRect: вызывает большое использование памяти, поэтому я могу оптимизировать свое представление.

Кто-нибудь помогает мне?Спасибо.

1 Ответ

2 голосов
/ 24 мая 2011

РЕДАКТИРОВАТЬ: я только заметил, что вы на самом деле не сказали, говорите ли вы об iOS или Mac OS X. Я предположил, iOS;если это OS X, вы сами по себе: P Для дальнейшего использования рекомендуется пометить ваш вопрос операционной системой или фреймворком, для которого вы разрабатываете.

По сути, drawRect - самый трудоемкий способ памятииметь дело с мнениями.iOS не может оптимизировать систему подпредставления, как обычно, потому что она не знает, что вы делаете, поэтому существует несколько уровней буферов кадров, которые необходимо перерисовать, прежде чем кадр достигнет экрана.Подумайте, нужно ли перерисовывать все представления, и серьезно подумайте об использовании системы макетов подпредставлений (needsLayout: and friends) или Core Animation, чтобы делать то, что вам нужно.

Если вам серьезно нужен drawRect :, don 'т ваше мнение любые подпредставления .Subviews не играют хорошо с drawRect.Либо делайте все свои рисунки в нужном вам виде, либо используйте подсистему макетов или CA.

Наконец, прошлогодние сессии WWDC здесь очень помогают.Сессия 131 «Оптимизация производительности на iOS» и сессия 104 «Разработка приложений с представлениями с прокруткой» рассказывают о производительности UIView.Вот ссылка на сессии, если вы ее потеряли: Видео сессий WWDC

...