Вопросы о drawRect в iOS

#ios #memory-management #drawrect

#iOS #управление памятью #drawrect

Вопрос:

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

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

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

Ответ №1:

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

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

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

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

Комментарии:

1. Я обновил заголовок, и спасибо за ваш ответ! Я перейду по ссылке