Оптимизация производительности приложений для ios
Оптимизация общей производительности приложения для iOS
Оптимизация производительности - это большая проблема, поэтому, прежде всего, необходимо разделить эту проблему на небольшие проблемы, которые влияют на производительность приложения, прежде чем отвечать, поэтому вот некоторые разборки, чтобы ответить на этот вопрос, и в то же время напомнить себе, что когда вы столкнувшись с такой большой проблемой снова, научитесь анализировать саму проблему и как ответить на эти вопросы.
Несколько проблем, влияющих на производительность приложения:
1. Производительность сети
Оптимизация производительности сети включает в себя разрешение DNS, алгоритмы маршрутизации и производительность на стороне сервера. Я мало что об этом знаю. Вы можете обратиться к статье:
Практика оптимизации производительности сети в приложении Ctrip
Три фактора, влияющие на производительность сети мобильного приложения
2. Проблемы с памятью
В эпоху MRC освобождение памяти вручную вызовет большое количество утечек памяти. Но в эпоху ARC большинство утечек памяти было решено, но проблема утечек памяти все еще возникает:
3. Основной поток заблокирован.
Весь пользовательский ввод и рендеринг UIKit выполняются в основном потоке. Следовательно, чтобы обеспечить плавность работы приложения, вы не должны блокировать основной поток и помещать то, что можно сделать в дочернем потоке, в дочерний поток, чтобы сократить вычисление и обработку основного потока.
Если вы выполняете следующие операции в основном потоке:
Из-за большого объема обработки он блокирует основной поток и вызывает сбои. Поэтому, чтобы сократить трудоемкие операции в основном потоке, используйте несколько потоков (NSThread, NSOperationQueue, GCD) для их обработки. Может просматриватьТехнология многопоточности в OS X и iOSВведение в многопоточность. И обработка рендеринга основным потоком будет влиять на эффективность, поэтому этот поток также необходимо обработать.
4. Закадровый рендеринг
Внеэкранный рендеринг относится к новому буферу, созданному графическим процессором для операций рендеринга в дополнение к текущему экранному буферу. Рендеринг вне экрана означает, что часть вашего приложения отображается дважды за кадр. Так что это вызовет определенную потерю производительности.
Для изменений кадра, границ, преобразования и других атрибутов UIView или CALayer потребляемые ресурсы намного превышают изменения их других атрибутов.
Вы можете обратиться к следующим статьям:
Рисуем пиксели на экране
Сводка проблем производительности рисования iOS, вызванных рисованием теней
Исследование внеэкранного рендеринга iOS
5. Обработка изображений
Обычно imageNamed: используется для загрузки изображения в основной связке, эта функция будет кэшировать загруженное изображение. Следовательно, этот API очень эффективен для изображений, которые используются повторно. Но для тех изображений, которые используются редко, это потребует много памяти.
Поэтому используйте функцию initWithContentsOfFile: при загрузке изображения приложения, которое используется один раз, и используйте функцию imageNamed: при загрузке изображения, которое используется несколько раз. Например, путь загрузки используется при загрузке изображения страницы руководства, а метод imageNamed: используется для общего фонового изображения.
Общие методы оптимизации заключаются в уменьшении использования памяти, сокращении бизнес-обработки основного потока, использовании пространства для времени и т. Д. На основе этих стратегий и технических соображений для выбора направления оптимизации.
Ниже приведены некоторые подробные стратегии оптимизации для iOS.
Тормоз для броненосца USS Indiana BB-1, 1910 год. Эта штуковина должна тормозить корабль водоизмещением 10453 тонны.
Пользователи не любят ждать. Они не заботятся (и не должны) о том, что необходимо приложению для инициализации, они просто хотят, выполнить свою задачу как можно быстрее. Ваше приложение должно запускаться почти мгновенно, его интерфейс должен быть красивым с плавными переходами. Производительность приложения является одним из ключевых преимуществ в условиях конкуренции на рынке программного обеспечения.
Как разработчики, мы также хотим, гордиться своими приложениями.
Тем не менее, оптимизация производительности является сложной проблемой. Большинство узких мест противоречит здравому смыслу. При отсутствии надлежащих измерений, крайне трудно понять, что замедляет ваше приложение.
Для того, чтобы иметь возможность оптимизировать производительность вашего приложения, вы должны принимать решения, основанные на данных. В этой части я покажу, как получить эти данные путем измерения производительности различных частей вашего приложения.
Компании EDISON разрабатывает мобильные приложения для Android и iOS.
Мы делаем в том числе и внутренние мобильные приложения (не публикуемые на App Store или Play Store). Они рассчитаны не на широкий круг пользователей, а только на сотрудников компании, для которых требуется обеспечить доступ к закрытым разделам корпоративного сайта и приватным информационным системам.
Инструменты которые я затрону:
- аналитика использования CPU, GPU, памяти и потребления энергии вашим приложением;
- отзывчивость приложения;
- время запуска;
- метрики производительности, собираемые у ваших пользователей.
Есть 4 основных направления, которые нужно использовать в первую очередь:
- CPU («Time Profiler» инструмент);
- GPU («Core Animation» инструмент);
- использование памяти («Allocations» инструмент);
- потребляемая мощность («Energy diagnostics» инструмент).
Видео WWDC являются наилучшим источником информации об использовании Instruments для профилирования вашего приложения.
Вот некоторые варианты, с чего можно начать.
Отзывчивость приложения
Следующая важная вещь, для измерения это отзывчивость пользовательского интерфейса. Сенсорная обработка происходит в основном потоке. Когда у вас есть длительные операции там, ваше приложение становится вялым.
Некоторые операции могут занять длительное время, даже если они не используют процессор. Если у вас есть синхронные вызовы в главном потоке, то следует измерить время, затраченное на эти вызовы.
Для измерения, вы можете использовать пример:
Еще один подход был описан разработчиками Viber. Они создают специальный поток, который следит за главным потоком и проверяет, что он не блокируется более чем на 400 мс.
Более подробную информацию можно найти в их презентации (PDF, 7MB).
Используйте эти данные для обнаружения вызовов, которые занимает слишком много времени (400 мс хороший порог, вы можете прочитать эту книгу для получения дополнительной информации) и либо оптимизировать их или переместить его из основного потока.
Время запуска
Следующая важная вещь для измерений — это как быстро запускается ваше приложение. Типичный пользователь тратит всего несколько минут в вашем приложении. Долгое время запуска приводит к разочарованию.
Есть 2 варианта запуска вашего приложения.
- Холодный запуск: процесс вашего приложения еще не был запущен, запуск выполняется сначала через ОС.
- Теплый запуск: ваше приложение было свернуто, но не было убито. Оно восстанавливается из фона.
Существует последовательность запуска из приложения IOS. Фазы запуска приложения (из документации)
1. Измерьте общее время, затраченное на старте
Мы должны измерить время, от начала main () до конца applicationDidBecomeActive:
После добавления кода проверяйте, что не становится хуже, когда вы вносите новые функции в приложение. Старайтесь держать время холодного запуска до 1 сек.
2. Измерьте время фаз при запуске
Как правило, недостаточно знать только общее время, затраченное на запуск. Важно также знать, какая фаза последовательности запуска замедляет его.
Наиболее важные этапы выглядят так:
- [AppDelegate application: didFinishLaunchingWithOptions:] — этот метод вызывается, на этапе когда показано загрузочное изображение, или storyboard. Как только точка исполнения возвращается из этого метода, начинается фактическая загрузка пользовательского интерфейса.
- [UIViewController loadView] — если ваше приложение создает собственный UIView, это место, где происходит его инициализация.
- [UIViewController viewDidLoad] — UIView был загружен; время для окончательной инициализации.
- [AppDelegate applicationDidBecomeActive:] — пользовательский интерфейс уже инициализирован, но он по-прежнему заблокирован, пока вызов этого метода не будет закончен. Этот метод также вызывается, когда приложение восстанавливается из фона.
3. Измерьте время запуска «под давлением»
Существует одно важное различие между реальным миром и типичной тестовой средой.
Ваше приложение не живет в изоляции в реальном мире. Пользователь, как правило, переходит в ваше приложение из другого приложения. «Другое приложение» может быть очень тяжелым.
Это действительно важно, измерить время запуска в условиях, когда ваше приложение, запускается в то время как другое, тяжелое приложение в то же время переводится на задний план и пытается сохранить свои данные. Это тестирование может выявить некоторые неожиданные результаты. Код, который был совершенно безвреден прежде, может замедлить ваше приложение значительно в этих условиях.
- 4. Приложение уже запустилось, но по-прежнему бесполезно
Показатели производительности, подлежащие сборке от пользователей
Все предыдущие измерения возможны в тестовой среде. Они необходимы, но не достаточны. Если ваше приложение популярно, если база ваших пользователей распространена по всему земному шару, некоторые из ваших пользователей могут иметь такую среду, которая сильно отличается от того, что вы ожидали.
Они могут иметь разные:
- сетевые условия;
- аппаратных средств;
- программное обеспечение (версия ОС, Jailbreak. );
- количество свободного места на устройстве;
- и т.п.
Вы можете получить оценку “одна звезда” при обзоре с жалобами ( «Ваше приложение медленно!»). Даже если все метрики которые вы измеряете в лаборатории находятся в безопасной зоне.
Что с этим делать?
Определить набор показателей эффективности (KPI) и собрать их от ваших реальных пользователей. Вы можете использовать практически любой пакет аналитики, чтобы сделать это.
Вот примеры ключевых показателей эффективности, которые вы можете получать от пользователей:
- общее холодное время запуска;
- общее теплое время запуска;
- время запуска по фазам;
- время, затраченное на скачивание необходимых данных с сервера;
- количество раз, когда основной поток блокируется более чем на 400 мс;
- количество предупреждений нехватки памяти;
- количество FOOMS;
- длительность операций, когда интерфейс заблокирован, или является непригодным для использования.
Выводы
Как вы можете видеть, измерения производительности выходят за рамки только запуска Instruments.app. Есть и другие важные моменты для анализа. Некоторые из описанных способов анализа быстро и легко осуществить, другие требуют больше времени и усилий. Тем не менее, они помогут вам контролировать производительность приложения, чтобы найти и устранить проблемы и сделать ваше приложение более приятным в использовании.
Достижение высокой производительности прокрутки, на примере приложения Facebook
Одной из наших целей в Facebook, является максимальное удобство для пользователей от использования нашего iOS приложения. Одна из задач, это убедиться, что лента новостей прокручивается плавно, но в сложном UIScrollView, с весьма разнообразным содержанием, не существует в настоящее время хороших способов в iOS, чтобы определить, почему частота кадров снизилась. Мы разработали стратегию идентификации, которая работает очень хорошо на практике и помогает нам поддерживать высокую производительность прокрутки. Далее, мы подробно расскажем, как это работает.
Измерение производительности прокрутки на устройстве
Первым шагом в большинстве работ является измерение производительности и измерительные приборы. Инструменты от Apple позволяют измерять частоту кадров вашего приложения, но все равно трудно смоделировать все взаимодействия, которые происходят, во время работы приложения. Другим подходом было бы измерить производительность прокрутки непосредственно на устройстве.
Мы измеряем частоту кадров на устройстве с помощью CADisplayLink API Apple. Каждый раз, когда кадр обрисовывается, мы измеряем время, которое потребовалось на это. Если потребовалось более одну шестидесятую секунды (16.6 мс), то частота кадров была низкой и прокрутка дергалась.
[CADisplayLink displayLinkWithTarget:self selector:@selector(_update)];
[_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
Обнаружение и фиксация регрессии
В отличие от видеоигр, приложение Facebook не очень интенсивно использует GPU. Оно отображает в основном текст и изображения, и, таким образом, большинство кадров падает из-за нагрузки на процессор. Для поддержания высокой производительности процессора, мы хотим убедиться, что все операции, которые составляют рендеринг данных в Ленте новостей выполняются, менее чем за 16.6 миллисекунд. На практике рендеринг кадра состоит из нескольких этапов, и приложение, как правило, имеет только от 8 до 10 мс в основном потоке до падения частоты кадров.
Знание, того где основной поток проводит большую часть времени на CPU, позволяет получить наилучшую производительность прокрутки. Можно использовать инструмент Time Profiler, чтобы оценить, где основной поток проводит большую часть времени, но бывает трудно воссоздать точные условия на устройстве, когда частота кадров падает.
Другой подход заключается в сборе данных во время работы приложения, чтобы помочь определить наиболее вероятную причину падения кадра. То есть, можно сказать, что приложение профилирует само себя. Чтобы сделать это, надо использовать сигналы. Полученные данные могут быть не точными, но это позволяет получить данные профилирования в изолированном окружении. Это невозможно с традиционным профилированием на iOS с помощью стандартных инструментов, таких как Instruments и DTrace.
Сигналы и профилирование на устройстве
Операции, которые являются безопасными, при работе с сигналами довольно ограничены. Выделение памяти, например, не являются безопасной операцией, поэтому единственное, что мы делаем в обработчике сигнала — это захватываем текущую трассировку стека.
Срабатывание сигнала
После того, как сигнал установлен, нам нужен механизм, чтобы запустить сигнал. Это не может быть отправлено из главного потока, так как этот поток мы пытаемся отслеживать. GCD является отличной абстракцией для управления потоком исполнения. Тем не менее, источники отправки, стандартный механизм для поддержки блоков исполнения, будут выполняться с временным разрешением не чаще чем каждые 10 мс. NSThread предлагает необходимую детализацию с более высоким временным разрешением.
Когда основной поток сильно загружен, и как следствие, происходит падение частоты кадров, то он будет потреблять большую часть времени выполнения процессора. К сожалению, это означает, что наш сообщающий поток, будет разбужен, когда основной поток уже закончит все трудоемкие операции, и мы пропустим момент интенсивного использования. Чтобы обойти эту проблему, мы даем сообщающему потоку приоритет, который выше, чем в основном потоке. Это гарантирует, что мы можем захватить трассировку даже тогда, когда основной поток максимально нагружен.
Как это часто бывает с измерением производительности, акт измерения влияет на приложение и может иметь дополнительные последствия для производительности приложения. Захват трассировки на iPhone 4S занимает примерно 1 микросекунду, а когда у вас есть всего 16 миллисекунд, казалось бы, это совсем немного. Кроме того, акт приостановления основного потока (отправка сигнала) генерирует больше переключений контекста между потоками и может замедлить приложение в целом.
Таким образом, важно выбрать идеальную политику измерений только тогда, когда это абсолютно необходимо. В нашем случае, мы сделали ряд оптимизаций, при измерениях. Например, сигнал должен быть отправлен только тогда, когда пользователь выполняет прокрутку. Еще одно изменение, которое мы сделали — это измерение производительности только на внутренней сборке, которую используют только сотрудники, так что измерение не повлияет на нашу публичную версию программы.
Отчетность и символизация
После того, как трассировка захвачена, мы собираем эти данные на устройстве и отправляем их на сервер в пакетном режиме. Трассировка, конечно же, является нечитаемой — коллекция адресов — и должна быть символизирована, для чего существует целый ряд инструментов. Apple, Atos API, Google Breakpad и atosl Facebook, вот несколько примеров. После символизации мы агрегируем стеки вызовов с помощью инструмента визуализации данных для идентификации частей системы, на которых сосредоточить наши усилия для предотвращения регрессии, поскольку мы продолжаем повышать эффективность работы нашей прокрутки.
Ниже приведен пример, показывающий потребление процессора двух версий приложения Facebook:
Попробуйте это
Эта стратегия позволила нам обнаружить очень большое количество регрессий, прежде чем они попали в релизную версию. Мы поместили образец этой реализации на GitHub. Мы надеемся, что вы найдете его полезным в своих проектах.
Обращаем ваше внимание, что заниматься оптимизацией на iOS6 и выше бессмысленно .
По опыту iOS не нуждается в подобных манипуляциях. Редактируя какие-либо системные файлы,
пользователь увеличивает риск нестабильной работы системы, потери личных данных и пр.
Вся информация предоставляется в исходном виде, без гарантий полноты или своевременности,
и без иных явно выраженных или подразумеваемых гарантий.
Поэтому прежде чем выполнять какие-либо действия удостоверьтесь, что у вас есть все необходимое
для восстановления работоспособности девайса в случае возникновения ошибки.
Для этого нужно сделать следующее:
- Подключаем девайс к компьютеру
- Открываем iFunbox
(Рекомендую скачивать iFunbox Classic, т.к. во-первых он легче весит; во-вторых, в нем более удобная навигация; в-третьих, данная инструкция написана под него)
- Нажимаем "Необработанная файловая система". Если вы видите папки User, var, System, etc и пр., переходите к следующему пункту.
Данные подготовительные шаги сделаны в целях безопасности:
если что-то пойдет не так, вы вернете бекап назад!
- Не забываем делать резервные копии файлов!
- После каждого пункта работы или действия с файлами перезагружайте устройство!
- Все нижеперечисленные действия вы делаете на свой страх и риск, так как никто не может гарантировать стабильную работу вашего устройства.
- Приведенные операции с файловой системой можно проводить с помощью таких файловых менеджеров, как:
iFile (на самом девайсе) или iFunBox , iTools , iPhone PC Suite (на компьютере).
- если скрываем стандартное приложение, идем по пути /Applications/НАЗВАНИЕ_ПРИЛОЖЕНИЯ.app
- если приложение из Appstore, идем по пути /User/Applications/"Кракозябры"/НАЗВАНИЕ_ВАШЕГО_ПРИЛОЖЕНИЯ.app
Открываем в открытой папке файл Info.plist и добавляем код (например, после <plist version="1.0"> ):
Сохраняем документ, перезагружаемся (достаточно респринга)
PS Работоспособность приложения все равно сохраняется. Так, скрытую программу можно вызвать через, скажем, Activator или MobileTerminal
Ищем в файловой системе папки *.lproj , удаляем всё кроме ru.lproj и English.lproj ).
Безопасно удалить языковые пакеты можно через приложение iCleaner
* Если удаляете языки через программу iCleaner, обязательно сделайте резервную копию (backup) внутри программы и сохраните его на компьютере.
В противном случае, если вы захотите восстановить устройство через программу Cydia Impactor , устройство зависнет и придется восстанавливаться на последнюю версию iOS, полностью потеряв jailbreak.
Многие предприниматели используют смартфоны для выполнения различных бизнес-задач. Однако со временем некоторые устройства начинают работать медленнее. Издание Business Insider опубликовало материал, в котором перечислило 12 способов ускорения работы iPhone.
Нужно избавиться от старых фотографий
Удаление ненужных файлов является хорошим способом ускорения работы смартфона. Часто случается так, что пользователь хранит сотни фотографий на своем iPhone — куда эффективнее синхронизировать их с iPhoto на компьютере или скопировать в iCloud с последующим удалением из памяти телефона.
Стоит удалить «тяжелые» приложения
Чем больше приложений установлено в iPhone, тем медленнее он будет работать. Для того, чтобы увидеть, сколько памяти потребляет каждое приложение, нужно зайти в меню Настройки>Основные>Статистика (в англоязычном интерфейсе Settings>General>Usage).
Очистка кэша Safari
При пользовании интернетом браузер сохраняет некоторые данные с веб-страниц в кэш. Чтобы еще немного увеличить скорость работы телефона, эти файлы можно удалить. Для этого необходимо зайти в меню Настройки>Safari>Очистить историю (Settings>Safari>Clear History). В этом же меню находятся пункт для удаления загруженных мобильных данных и cookie-файлов.
Отключение автообновления приложений
Иногда причиной не самой быстрой работы смартфона становится фоновое обновление приложений. Журналисты Business Insider рекомендуют загружать обновления приложений вручную. Для этого необходимо изменить настройки обновлений в меню Настройки>iTunes Store, App Store>Автоматические загрузки (Settings>iTunes & App Store >Automatic Downloads) — соответствующие слайдеры должны находиться в состоянии «отключено».
Отключение автозагрузок
Минус автоматических загрузок приложений заключается в том, что иногда смартфон может начать скачивание приложение, которое установлено на iPad пользователя, но отсутствует на iPhone. Таким образом на телефон попадают не всегда нужные приложения, кроме того — процесс загрузки замедляет работу устройства. Поэтому в меню Настройки>iTunes Store, App Store>Автоматические загрузки стоит отключать не только автообновление, но и автоматическую загрузку.
«Убийство» фоновых приложений
Часто приложения, которые работают «в фоне» потребляют значительное количество ресурсов смартфона — например, условная мобильная игра может быть весьма требовательна в этом плане. Пользователи десктоп-компьютеров часто вручную отключают программы, запущенные в фоновом режиме, для экономии ресурсов и ускорения работы. Смартфоны здесь мало чем отличаются.
Отключение автоматического режима различных настроек
Чтобы iPhone работал быстро, его нужно настраивать вручную. Поэтому все автоматические настройки чего-либо стоит отключить — по словам экспертов, любое действие, совершаемое телефоном в автоматическом режиме ( например поиск Wi-Fi или загрузка приложений) замедляют его работу. Поэтому упомянутая функция поиска доступных беспроводных сетей также должна быть отключена.
Периодический перезапуск устройства
Смартфон — это практически небольшой компьютер, и относиться к нему нужно соответственно. Привычка никогда не выключать телефон появляется очень легко, но периодическая перезагрузка еще никому не повредила. Точно также, как отключение «фоновых» приложений помогает ускорить работу устройства, перезагрузка iPhone может позволить освободить дополнительные ресурсы, которые могли быть заняты различными системными процессами.
Установка обновлений
Разработчики часто исправляют ошибки в приложениях и выпускают соответствующие обновления. Некоторые баги могут приводить к излишнему потреблению ресурсов, что замедляет работу смартфона. При этом к большим пакетам обновлений стоит относиться с осторожностью — последние версии iOS на старых моделях iPhone могут работать медленно, поскольку «железо», установленное в них просто физически не может на должном уровне взаимодействовать с новейшим софтом.
Оптимизация распределения памяти с помощью специальных приложений
Чаще всего медленная работа смартфона так или иначе связана с памятью. Издание Macworld рекомендует использовать для проверки быстродействия устройства приложение Battery Doctor. Одной из его функций является перераспределение памяти — если телефон работает медленно, то нажатием одной кнопки пользователь может ускорить его, перераспределив ресурсы памяти (Memory Boost). В случае замедлении работы iPhone, журналисты Macworld рекомендуют проделывать процедуру перераспределения памяти прежде, чем переходить к другим шагам по решению проблемы скорости.
Загрузка резервной копии
Если iPhone начинает «тормозить» и перечисленные выше методы его ускорения не помогают, остается вариант загрузки резервной копии с тех времен, когда устройство еще работало, как нужно. Для того, чтобы это сделать нужно подключить телефон к компьютеру, запустить iTunes, выбрать в меню нужную резервную копию и установить её. На сайте Apple содержатся подробные инструкции по восстановлению iPhone.
Пригодится как владельцам стареньких айфонов, так и обладателям новых.
Никаких оптимизаторов, твиков или утилит нам не потребуется. Есть первый способ, проверенный. А есть длинный, сегодня продолжаем.
1. Отключаем фоновое обновление контента
Даже самый новый iPhone или iPad начнет тормозить, если в фоновом режиме приложения постоянно что-то качают из сети, обновляют данные или отправляют статистику.
Оставить фоновую активность следует только для приложений, которые действительно важны. Например, если необходимо постоянно иметь свежий прогноз погоды или быть в курсе всех изменений в определенном мессенджере или социальной сети. Для таких приложений следует оставить возможность загружать данные, находясь в фоновом режиме.
Смело отключай все игры, и большинство программ, которые отлично работают офф-лайн.
2. Чистим «тяжелые» приложения
Памяти на iPhone или iPad часто не хватает, особенно если он не вот такой. При нехватке памяти устройство неминуемо начинает тормозить. Простой мессенджер или клиент облачных сервисов может занимать несколько десятков мегабайт, а контент, хранимый в нем, забивает сотни или тысячи мегабайт на устройстве.
3. Убираем лишнюю анимацию
Избавишься от тряски, плавающих обоев, плавного открытия и закрытия программ.
4. Отключаем автоматическую загрузку контента
Чтобы программы, игры и контент, загруженный на других устройствах, автоматически не попадал на iPhone, отключи такую особенность iOS.
Решишь 4 проблемы одним махом: снизишь фоновую активность, сэкономишь сетевой трафик, не будешь забивать место на устройстве и продлишь время его автономной работы.
5. Отключаем ненужные приложения в Spotlight
Знаешь, как тормозит поиск по iOS при открытии? Убери из проверяемых результатов лишние программы.
6. Чистим кэш в Safari
7. Очищаем оперативную память
Иногда полезно очищать оперативную память от фоновых процессов и приложений. Конечно, iOS все умеет делать сама, но лишняя помощь может быть кстати.
- зажимай кнопку Power до появления меню выключения;
- нажимай на кнопку Home и держи её 15 секунд;
- попадешь на главный экран, все фоновые приложения завершатся.
8. Перезагружаем устройство
Apple приучил нас, что Mac, iPhone, iPad и другие гаджеты могут работать без перезагрузки очень долго. Конечно, хорошо, что не приходится выключать и включать смартфоны и планшеты каждый день, но сделать перезагрузку иногда стоит.
- выключи устройство;
- включи устройство)
Смотри подробно: 8 советов для ускорения iPhone
(10 голосов, общий рейтинг: 4.40 из 5)Артём Суровцев
Люблю технологии и все, что с ними связано. Верю, что величайшие открытия человечества еще впереди!
Читайте также: