Улучшение производительности получения

Получение является относительно дорогой работой на любой платформе, и оптимизация Вашего кода для прорисовки должна всегда быть важным шагом в Вашем процессе разработки. Таблица a-1 перечисляет несколько подсказок для обеспечения, что Ваш код для прорисовки максимально оптимален. В дополнение к этим подсказкам необходимо всегда использовать доступные инструменты производительности, чтобы протестировать код и удалить горячие точки и избыточность.

Табличные a-1  Подсказки для улучшения производительности получения

Подсказка

Действие

Нарисуйте минимально

Во время каждого цикла обновления необходимо обновить только части фактически изменившегося представления. Если Вы используете drawRect: метод UIView чтобы сделать Ваше получение, используйте прямоугольник обновления, переданный тому методу для ограничения объема получения. Для получения OpenGL необходимо отследить обновления сами.

Вызвать setNeedsDisplay: рассудительно

Если Вы вызываете setNeedsDisplay:, всегда проводите время для вычисления фактической области, которую необходимо перерисовать. Только передайте прямоугольник, содержащий все представление.

Кроме того, не вызывайте setNeedsDisplay: если Вы фактически не должны перерисовывать содержание. Если содержание фактически не изменилось, не перерисовывайте его.

Отметьте непрозрачные представления как таковые

Составление композита представления, содержание которого непрозрачно, требует намного меньшего усилия, чем составление композита того, которое частично прозрачно. Для создания представления непрозрачным содержание представления не должно содержать прозрачность и opaque свойство представления должно быть установлено в YES.

Ячейки таблицы повторного использования и представления во время прокрутки

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

Повторное использование соединяет каналом путем изменения текущей матрицы преобразования

Путем изменения текущей матрицы преобразования можно использовать единственный путь для рисования содержания на различных частях экрана. Для получения дополнительной информации посмотрите Используя Координату, Преобразовывает для Улучшения Производительности Получения.

Избегите очищать предыдущее содержание во время прокрутки

По умолчанию UIKit очищает текущий буфер контекста представления до вызова drawRect: метод для обновления той же самой области. При ответе на прокрутку событий в представлении очищение этой области неоднократно во время прокрутки обновлений может быть дорогим. Для отключения поведения можно изменить значение в clearsContextBeforeDrawing свойство к NO.

Минимизируйте изменения состояния графики при рисовании

Изменение состояния графики требует работы базовыми графическими подсистемами. Если необходимо нарисовать содержание, использующее подобную информацию состояния, попытайтесь соединить то содержание для сокращения количества необходимых изменений состояния.

Используйте Инструменты для отладки производительности

Базовый инструмент Анимации может помочь Вам определить проблемы производительности получения в своем приложении. В частности:

  • Обновленные Области Flash упрощают видеть, какие части Вашего представления фактически обновляются.

  • Цветные Неправильно выровненные Изображения помогают Вам видеть изображения, которые являются выровненные плохо, который приводит и к нечетким изображениям и к низкой производительности.

Для получения дополнительной информации посмотрите Измеряющую Производительность при обработке графики в Своем устройстве на iOS в Инструментальном Руководстве пользователя.