PreWorking 4: Жизненный цикл iOS приложения

P

Понимание того, как устроено и работает приложение очень важно для более осмысленного программирования. Сегодня мы рассмотрим тему «жизненный цикл iOS приложения».

Приложения представляют очень сложное взаимодействие между вашим кодом и системными фреймворками. Системный фреймворки предоставляют базовую инфраструктуру, с которой все приложения должны работать, а вы пишете код для настройки этой инфраструктуры.

Фреймворки iOS основаны на таких шаблонах проектирования, как MVC и делегирование (Мы писали об этом ранее). Понимание этих шаблонов имеет решающее значение для создания приложения.

Жизненный цикл iOS приложения: Функция main

Точкой входя для каждого C-приложения является функция main. iOS приложения не стали исключением. Вот только вам не нужно писать эту функцию самостоятельно. Вместо этого, Xcode создаст ее как часть вашего основного проекта. Ниже вы можете увидеть эту функцию для Objective-C. За редкими исключениями, вы никогда не должны ее изменять.

Жизненный цикл iOS приложения: Структура приложения

Во время запуска UIApplicationMain функция устанавливается несколько ключевых объектов и запускает приложение. Сердцем каждого iOS приложения является объект UIApplication, задача которого — облегчить взаимодействие между системой и другими объектами приложения. Рисунок ниже показывает объекты, обычно встречающиеся в iOS приложениях. А еще ниже представлено описание роли каждого объекта в приложении. Первое что стоит отметить — iOS приложения используют архитектуру Model-View-Controller. Эта архитектура имеет решающее значение для создания приложений, которые могут работать на различных устройствах с различными размерами экрана.

жизненный цикл

Объект UIApplicationUIApplication управляет циклом обработки событий и разными типами поведения приложений высокого уровня. Он также сообщает о ключевые переходах приложения и некоторых специальных событиях (например, входящих уведомлений Push) своему делегату, который представляет собой пользовательский объект. Используйте UIApplication «как есть», без подклассов.
Объект UIDelegateApp Delegate является сердцем вашего кода. Этот объект работает в связке с объектом UIApplication и служит для обработки инициализации приложения, перехода между состояниями, а так же обеспечивает множество событий в приложениях высокого уровня.
Documents и Data Model ObjectsМодель данных может быть специфической для вашего приложения. Пример: банковская база данных и приложения со списком фильмов будут иметь разную модель данных. Приложения могут также использовать объекты Documents (подклассы UIDocuments) для управления моделями данных. Объекты Documents необязательны, но предлагают удобный способ группировать данный в пакетах файлов.
Объект View ControllerОбъект View Controller служит для управления отображением контента вашего приложения на экране. Класс UIViewController является базовым классом для всех объектов View Controller. Он предоставляет функциональные возможности по умолчанию для загрузки представления, показывая их, вращая их в ответ на поворот устройства, а также несколько других стандартных систем поведения.
Объект UIWindowВыводит и координирует один или несколько View на экране. Большинство приложений имеют только один Window, в котором представлен весь контент приложения на главном экране. Но могут потребоваться дополнительный Window. Например, для отображения вспомогательных элементов на внешнем экране.
Объекты View, объекты Controls, объекты Layer.Объекты View обеспечивают визуально представление содержимого вашего приложения. View является объектом, который рисует содержанимое в назначенной прямоугольной области и реагирует на события в пределах этой области. Объекты Controls представляют из себя специальные типы View, отвечающие за реализацию привычных объектов интерфейса: кнопки, текстовые поля, переключатели и т. д. Объекты Layer - это объекты данных, которые представляют из себя визуальный контент.

Жизненный цикл iOS приложения: Главный цикл

Приложение в главном цикле обрабатывает все пользовательские события. Главный цикл работает в главном потоке приложения. На изображении ниже показана схема работы главного цикла.

Жизненный цикл

Жизненный цикл iOS приложения: Состояние приложения

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

Not RunningПриложение не запущено, либо запущенно но прервано системой.
InactiveПриложение работает, но в настоящий момент ничего не делает (это может быть связано с выполнением другого кода). Приложение, как правило, остается в этом состоянии очень мало времени и переходит в другое состояние
ActiveНормальный обычный режим работы приложения на переднем плане.
BackgroundПриложение находится в фоне, но работает. Большинство приложений входят в это состояние на короткое время и позже приостанавливаются. Но если необходимо дополнительное время для работы в бекграунде, приложение может оставаться в этом состоянии
SuspendedПриложение работает в фоне, но не выполняет никакой код. Система перемещает приложение в это состояние автоматически и не предупреждает об этом. При условии малого количества памяти, система может не предупреждая закрыть приложения в этом состоянии для освобождения памяти.

жизненный цикл

Большинство переходов между состояниями обеспечивается соответствующими методами в AppDelegate.

  • application:willFinishLaunchingWithOptions:— Этот метод вашего приложения позволяет вам выполнять код во время запуска приложения.
  • application:didFinishLaunchingWithOptions:— Этот метод позволяет вам перед окончанием запуска выполнить код прежде чем показать ваше приложение пользователю.
  • applicationDidBecomeActive:— Дает вам знать, что оно становятся foreground приложением. Используйте этот метод для последних приготовлений.
  • applicationWillResignActive:— Дает вам значит, что приложение уходит из состояния foreground. Используйте этот метод для помещения вашего приложения в режим покоя.
  • applicationDidEnterBackground:— Дает вам знать, что приложение запущено в фоне и может быть выключено в любое время.
  • applicationWillEnterForeground:— Дает вам знать, что ваше приложение перемещено из фона обратно в foreground, но то, что оно еще не активно.
  • applicationWillTerminate:— Дает вам знать, что приложение было выключено. Этот метод не вызывается, если приложение было в состоянии suspended.

Жизненный цикл iOS приложения: Завершение приложения

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

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

Жизненный цикл iOS приложения: Потоки и параллельная работа

Система создает приложение в основном потоке и вы можете создавать отдельные потоки, если вам это необходимо, для решения каких либо задач. Для приложений iOS, предпочтительным методом является использование Grand Central Dispatch (GCD), оперирущим с объектами, и другиим интерфейсами асинхронного программирования не создавая и управляя потоками собственоручно. Такие технологии как GCD позволяют определить работу, которую вы хотите сделать и в каком порядке вы хотите ее сделать, но пусть система решает как лучше выполнить эту работу для CPU. Когда система управляет вашими потоками вам становиться легче писать код, обспечивается большая корректность кода, а так же увеличивает общую производительность.

Жизненный цикл iOS приложения: Материалы для углубления в тему

жтзненный цикл

 

Поддержите ресурс blog.justDev:

Сведения об авторе

Игорь Малеваный

Добавить комментарий

Instagram

Поддержите ресурс blog.justDev:

Свежие записи

Рубрики