Запись эффективного кода
Даже наиболее оптимизированный алгоритм может все еще оказать негативное влияние на время работы от батареи устройства. Поэтому рассмотрите следующие инструкции при записи кода.
Объедините работу для максимизации времени простоя
Это обычно - больше питания, эффективного для выполнения ряда вычислений или операций одновременно. Выполнение их в маленьких блоках за длительный период времени является более дорогостоящим. Если Вы переносите периодические дискреционные операции, например, обработайте их в пакетном режиме для выполнения вместе.
Для получения информации об общих стратегиях улучшения производительности см. Обзор производительности.
Перемещение отделывается от основного потока
Обязательно ограничьте тип работы, которую Вы выполняете на основном потоке Вашего приложения. Основной поток - то, где Ваше приложение должно обработать ввод данных пользователем. Несмотря на то, что использование этой организации не может эффективность непосредственно энергии удара, это поможет гарантировать, что Ваше приложение является всегда быстро реагирующим пользователю. Параллелизм также позволяет использование многократных процессоров, помогающее эффективности использования энергии.
Никогда не используйте основной поток для выполнения продолжительных или потенциально неограниченных задач, таких как задачи тот доступ сеть. Вместо этого всегда переходите те задачи на фоновые потоки. Предпочтительный способ поместить такие задачи в фоновом режиме состоит в том, чтобы использовать Grand Central Dispatch (GCD) или использовать объекты операции для выполнения задач асинхронно. Эти подходы позволяют системе управлять использованием энергии более эффективно.
Движущиеся задачи в фон оставляют Ваш основной поток свободным продолжать обрабатывать ввод данных пользователем. Когда Ваше приложение запускает или выходит, это особенно важно. В течение этих времен Ваше приложение, как ожидают, будет реагировать на события своевременно. Несмотря на то, что не распространенный в OS X, в iOS, если основной поток Вашего приложения блокируется во время запуска, система может уничтожить приложение, прежде чем это даже закончит запускаться. Точно так же, если основной поток блокируется при выходе из времени, система может уничтожить приложение, прежде чем это будет иметь возможность выписать решающие пользовательские данные.
Для получения информации об использовании GCD объекты операции и потоки, видят Руководство по программированию Параллелизма.
Настройте свой код с инструментами
Инструментальное приложение, включенное с XCode, собирает данные из Вашего запущенного приложения и представляет его в графической временной шкале. С Инструментами Вы собираете данные вокруг таких областей производительности как использование CPU Вашего приложения, использование памяти, активность диска, сетевая активность и графические операции. Путем просмотра данных вместе, можно проанализировать различные аспекты производительности приложения для идентификации потенциальных областей улучшения. (См. рисунок 5-1.) Для получения информации об использовании Инструментов, см. Инструментальное Руководство пользователя.


Оптимизируйте доступ к файлу
Вот некоторые инструкции для помощи в оптимизации доступа к файлу:
Минимизируйте объем данных, который Вы пишете в диск. Запишите файлы только, когда их содержание изменилось и совокупные изменения в единственную запись, когда Вы можете. Избегите выписывать весь файл только для изменения на несколько байтов; если Вы часто изменяете только мелкие детали больших файлов, рассматриваете использование базы данных, чтобы хранить данные.
Избегите получать доступ к диску слишком часто. Если Ваше приложение сохраняет информацию состояния к диску, сделайте так только, когда изменяется та информация состояния. Объедините изменения, когда это возможно, чтобы избежать писать небольшие изменения через короткие интервалы.
Считайте и запишите данные последовательно, когда это возможно. Переход вокруг файла занимает дополнительное время для поиска на новое расположение.
Считайте и запишите большие блоки данных из файлов, когда это возможно, имея в виду, что чтение слишком большого количества данных сразу могло бы вызвать различные проблемы. Например, чтение всего содержания файла на 32 МБ могло бы инициировать разбивку на страницы того содержания, прежде чем работа будет завершена.
При чтении или записи существенного количества данных, рассмотреть использование
dispatch_ioкоторый обеспечивает основанный на GCD асинхронный API для того, чтобы сделать файл IO. Используяdispatch_ioпозволяет Вам указывать свои потребности данных на высоком уровне, позволяя системе оптимизировать Ваш доступ к диску.Если Ваши данные состоят из структурированного содержания, к которому случайным образом получают доступ, сохраните его в базе данных и получите доступ к нему использование, например, SQLite или Базовые Данные. Используя базу данных особенно важно, если объем данных, которым Вы управляете, мог бы расти до больше, чем нескольких мегабайтов.
Поймите, как системные данные файла кэшей и знают, как оптимизировать использование тех кэшей. Избегите кэшировать данные сами, если Вы не планируете обратиться к ним несколько раз.
Для получения информации о том, как идентифицировать и решить связанные с файлом проблемы производительности, видит Подсказки по Производительности в Руководстве по программированию Файловой системы.
Службы сети доступа тщательно
Соединитесь с серверами внешней сети только при необходимости. То, когда необходимо соединиться с сетью, передать самый маленький объем данных, должно было выполнить работу. Используйте компактные форматы данных и не включайте просто проигнорированное избыточное содержание. Данные передачи в пакетах вместо того, чтобы распространить пакеты передачи в течение долгого времени. Если возможно, запланируйте свое использование сетевых служб какое-то время, когда уже будет использоваться та система.
См. Сетевой Обзор для получения дополнительной информации об использовании питания и пропускной способности эффективно и предотвращения общих сетевых ошибок.
Нарисуйте содержание эффективно
Ваше приложение никогда не должно рисовать содержание излишне. Получение заставляет CPU, GPU и экран расходовать энергию.
Когда Вы создаете и выполняете свое приложение в XCode, XCode может помочь Вам найти чрезмерное получение. С Вашим выполнением приложения выберите Show View Drawing из всплывающего меню Параметров отладки Представления у основания окна (как показано на рисунке 5-2).

Области экрана, собирающиеся быть обновленными, красятся желтыми, сопровождаемыми краткой паузой, сопровождаемой фактическим экранным обновлением. Точно так же области, собирающиеся быть обновленными через аппаратное ускорение, красятся зелеными. Это позволяет Вам видеть иначе незаметные экранные обновления, как они происходят.
В видео на рисунке 5-3 разработчик диагностирует неожиданное использование CPU и решает, что чрезмерное получение является причиной. (С 2013 WWDC выбирается это видео: энергетические Методы наиболее успешной практики.)
Если Ваше приложение использует только стандартные окна и средства управления, Вы, вероятно, не должны волноваться о рисовании производительности. Однако, если Вы делаете какое-либо пользовательское получение, убедиться контролировать Ваш код для прорисовки и гарантировать, что это выполняет эффективно.
В частности исследуйте способы оптимизировать Ваш код для прорисовки если Ваши поддержки приложений любое следующее:
Живое изменение размеров
Пользовательский код для прорисовки представления, особенно если части представления могут быть обновлены, не обновляя целое представление
Текстурированная графика
Полностью непрозрачные представления
Если Вы используете AutoLayout, рассматриваете эти инструкции:
Не создавайте избыточные ограничения.
Не удаляйте и добавляйте ограничения напрасно. Отслеживайте ограничения, которые необходимо изменить с переменными экземпляра (ivars).
Если необходимо изменить ограничения, попытайтесь установить вещи изменить просто константы ограничений (вместо того, чтобы изменить целые ограничения).
Для получения информации о том, как оптимизировать производительность получения, см. Инструкции по Производительности Получения.
Избегите работы, требующей опроса
Опрос препятствует тому, чтобы CPU шел в или остался в состоянии ожидания, использующем заряд батареи. Вместо того, чтобы опросить для получения уведомлений о событии используйте более эффективные службы (Таблица 5-1).
Обратите внимание на то, что подобная таблица появляется в, Реагируют на События Вместо того, чтобы Опросить с Таймерами, потому что те же методы могут использоваться для таймеров что касается опроса.
Событие, которое будет уведомлено о | Подход для следования | Описанный в |
|---|---|---|
Обновления к файлам | Сконфигурируйте источник отгрузки | Источники отгрузки в руководстве по программированию параллелизма |
Обновления к файлам или каталогам в масштабе всей системы | Создайте поток событий с Событиями Файловой системы API | |
Межпроцессные сообщения | Используйте службы XPC | Создание служб XPC в руководстве по программированию демонов и служб |
Используйте | ||
Используйте | ||
Изменения в диске или объеме | Регистр для дисковых арбитражных уведомлений | |
Доступность заменяемых в горячем режиме устройств | Создайте объект уведомления Набора I/O | Нахождение и доступ к устройствам в доступе к аппаратным средствам из приложений |
Сетевые события | Используйте службу уведомления нажатия Apple | Локальное и удаленное руководство по программированию уведомления |
Используйте добрый день | Руководство по программированию открытия службы DNS и руководство по программированию NSNetServices и CFNetServices | |
Используйте сетевую достижимость и соединение APIs | Определяя достижимость и будучи соединенным в инструкциях по программированию конфигурации системы | |
События, сгенерированные мышью, клавиатурой и другими устройствами ввода данных | Используйте мониторы события | Слежение за развитием событий в руководстве по обработке событий какао |