Прежде всего, приложения для iOS и Android имеют разную структуру приложений, что также приводит к различному жизненному циклу приложений. Итак, давайте посмотрим на структуры приложений.
На iOS до версии 13 это был жизненный цикл на основе приложений. Все приложение имело один экземпляр, и все события, связанные с его состоянием, были доставлены в UIApplicationDelegate. В результате этого поток приложений также повлиял на все приложение, включая внешние дисплеи.
Начиная с iOS 13, жизненный цикл приложения был переработан. Теперь, если приложение поддерживает сцены, то UIKit (платформа, связанная с интерфейсом) предоставляет отдельный жизненный цикл для каждой сцены. UIScene - объект, представляющий один экземпляр пользовательского интерфейса вашего приложения.
Но вы все равно должны помнить, что приложение имеет поток UIApplicationDelegate, который связан с глобальным состоянием приложения. Например, если в вашем приложении есть 2 сцены и вы отправляете одну из них в фоновый режим, UISceneDelegate будет уведомлен об этом, но UIApplicationDelegate этого не сделает, и будет уведомлен только в том случае, если все экземпляры сцен перейдут в фоновый режим.
Объект RunLoop обрабатывает входные данные из источников, таких как события мыши и клавиатуры из оконной системы и объектов порта. Объект RunLoop также обрабатывает события таймера.
Данное изображение показывает работу приложения от запуска процесса до первой итерации бесконечного цикла Runloop main потока
Ваше приложение не создает и явно не управляет объектами RunLoop. Система создает объект RunLoop по мере необходимости для каждого объекта потока, включая основной поток приложения. Если вам нужно получить доступ к циклу выполнения текущего потока, используйте метод класса current.
Обратите внимание, что с точки зрения RunLoop объекты Timer не являются “входными данными” — это особый тип, и они не вызывают возврата цикла выполнения при запуске.
Полезные ссылки:
Телеграм: https://t.me/the_cybermania