Запись эффективного кода

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

Объедините работу для максимизации времени простоя

Это обычно - больше питания, эффективного для выполнения ряда вычислений или операций одновременно. Выполнение их в маленьких блоках за длительный период времени является более дорогостоящим. Если Вы переносите периодические дискреционные операции, например, обработайте их в пакетном режиме для выполнения вместе.

Для получения информации об общих стратегиях улучшения производительности см. Обзор производительности.

Перемещение отделывается от основного потока

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

Никогда не используйте основной поток для выполнения продолжительных или потенциально неограниченных задач, таких как задачи тот доступ сеть. Вместо этого всегда переходите те задачи на фоновые потоки. Предпочтительный способ поместить такие задачи в фоновом режиме состоит в том, чтобы использовать Grand Central Dispatch (GCD) или использовать объекты операции для выполнения задач асинхронно. Эти подходы позволяют системе управлять использованием энергии более эффективно.

Движущиеся задачи в фон оставляют Ваш основной поток свободным продолжать обрабатывать ввод данных пользователем. Когда Ваше приложение запускает или выходит, это особенно важно. В течение этих времен Ваше приложение, как ожидают, будет реагировать на события своевременно. Несмотря на то, что не распространенный в OS X, в iOS, если основной поток Вашего приложения блокируется во время запуска, система может уничтожить приложение, прежде чем это даже закончит запускаться. Точно так же, если основной поток блокируется при выходе из времени, система может уничтожить приложение, прежде чем это будет иметь возможность выписать решающие пользовательские данные.

Для получения информации об использовании GCD объекты операции и потоки, видят Руководство по программированию Параллелизма.

Настройте свой код с инструментами

Инструментальное приложение, включенное с XCode, собирает данные из Вашего запущенного приложения и представляет его в графической временной шкале. С Инструментами Вы собираете данные вокруг таких областей производительности как использование CPU Вашего приложения, использование памяти, активность диска, сетевая активность и графические операции. Путем просмотра данных вместе, можно проанализировать различные аспекты производительности приложения для идентификации потенциальных областей улучшения. (См. рисунок 5-1.) Для получения информации об использовании Инструментов, см. Инструментальное Руководство пользователя.

Рисунок 5-1  Анализируя использование CPU с инструментом Профилировщика Времени

Оптимизируйте доступ к файлу

Вот некоторые инструкции для помощи в оптимизации доступа к файлу:

Для получения информации о том, как идентифицировать и решить связанные с файлом проблемы производительности, видит Подсказки по Производительности в Руководстве по программированию Файловой системы.

Службы сети доступа тщательно

Соединитесь с серверами внешней сети только при необходимости. То, когда необходимо соединиться с сетью, передать самый маленький объем данных, должно было выполнить работу. Используйте компактные форматы данных и не включайте просто проигнорированное избыточное содержание. Данные передачи в пакетах вместо того, чтобы распространить пакеты передачи в течение долгого времени. Если возможно, запланируйте свое использование сетевых служб какое-то время, когда уже будет использоваться та система.

См. Сетевой Обзор для получения дополнительной информации об использовании питания и пропускной способности эффективно и предотвращения общих сетевых ошибок.

Нарисуйте содержание эффективно

Ваше приложение никогда не должно рисовать содержание излишне. Получение заставляет CPU, GPU и экран расходовать энергию.

Когда Вы создаете и выполняете свое приложение в XCode, XCode может помочь Вам найти чрезмерное получение. С Вашим выполнением приложения выберите Show View Drawing из всплывающего меню Параметров отладки Представления у основания окна (как показано на рисунке 5-2).

  Доступ рисунка 5-2 показывает получение представления в XCode

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

В видео на рисунке 5-3 разработчик диагностирует неожиданное использование CPU и решает, что чрезмерное получение является причиной. (С 2013 WWDC выбирается это видео: энергетические Методы наиболее успешной практики.)

Рисунок 5-3  Используя XCode и Инструменты для диагностирования чрезмерного получения

Если Ваше приложение использует только стандартные окна и средства управления, Вы, вероятно, не должны волноваться о рисовании производительности. Однако, если Вы делаете какое-либо пользовательское получение, убедиться контролировать Ваш код для прорисовки и гарантировать, что это выполняет эффективно.

В частности исследуйте способы оптимизировать Ваш код для прорисовки если Ваши поддержки приложений любое следующее:

Если Вы используете AutoLayout, рассматриваете эти инструкции:

Для получения информации о том, как оптимизировать производительность получения, см. Инструкции по Производительности Получения.

Избегите работы, требующей опроса

Опрос препятствует тому, чтобы CPU шел в или остался в состоянии ожидания, использующем заряд батареи. Вместо того, чтобы опросить для получения уведомлений о событии используйте более эффективные службы (Таблица 5-1).

Обратите внимание на то, что подобная таблица появляется в, Реагируют на События Вместо того, чтобы Опросить с Таймерами, потому что те же методы могут использоваться для таймеров что касается опроса.

Таблица 5-1  Получая уведомления о событии для системных служб

Событие, которое будет уведомлено о

Подход для следования

Описанный в

Обновления к файлам

Сконфигурируйте источник отгрузки

Источники отгрузки в руководстве по программированию параллелизма

Обновления к файлам или каталогам в масштабе всей системы

Создайте поток событий с Событиями Файловой системы API

Руководство по программированию событий файловой системы

Межпроцессные сообщения

Используйте службы XPC

Создание служб XPC в руководстве по программированию демонов и служб

Используйте NSDistributedNotificationCenter класс

Ссылка класса NSDistributedNotificationCenter

Используйте notify_register, notify_post, и другие функции уведомления

Дарвинское уведомление ссылка API

Изменения в диске или объеме

Регистр для дисковых арбитражных уведомлений

Дисковое арбитражное руководство по программированию

Доступность заменяемых в горячем режиме устройств

Создайте объект уведомления Набора I/O

Нахождение и доступ к устройствам в доступе к аппаратным средствам из приложений

Сетевые события

Используйте службу уведомления нажатия Apple

Локальное и удаленное руководство по программированию уведомления

Используйте добрый день

Руководство по программированию открытия службы DNS и руководство по программированию NSNetServices и CFNetServices

Используйте сетевую достижимость и соединение APIs

Определяя достижимость и будучи соединенным в инструкциях по программированию конфигурации системы

События, сгенерированные мышью, клавиатурой и другими устройствами ввода данных

Используйте мониторы события

Слежение за развитием событий в руководстве по обработке событий какао