Архітектура iOS Application
Last updated
Last updated
Програми представляють дуже складну взаємодію між вашим кодом та системними фреймворками. Системний фреймворки надають базову інфраструктуру, з якою всі програми повинні працювати, а ви пишете код для налаштування цієї інфраструктури.
Фреймворки iOS базуються на таких шаблонах проектування, як MVC та делегування.
Життєвий цикл iOS програми
Точкою входу для кожної програми C є функція main. Під час запуску UIApplicationMain функція встановлює кілька ключових об'єктів та запускає програму. Серцем кожної програми iOS є об'єкт UIApplication, завдання якого - полегшити взаємодію між системою та іншими об'єктами програми. Малюнок нижче показує об'єкти, які зазвичай зустрічаються в додатках iOS. А ще нижче наведено опис ролі кожного об'єкта у додатку. Перше, що варто відзначити - iOS програми використовують архітектуру Model-View-Controller. Ця архітектура має вирішальне значення для створення програм, які можуть працювати на різних пристроях з різними розмірами екрану.
Об'єкт UIApplication: UIApplication керує циклом обробки подій та різними типами поведінки додатків високого рівня. Він також повідомляє про ключові переходи програми і деякі спеціальні події (наприклад, вхідних сповіщень Push) своєму делегату, який являє собою об'єкт користувача. Використовуйте UIApplication "як є", без підкласів.
Об'єкт UIDelegate: App 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 - це об'єкти даних, які являють собою візуальний контент.
Додаток в головному циклі обробляє всі події користувача. Головний цикл працює у головному потоці програми. На зображенні нижче показано схему роботи головного циклу.
У будь-який момент часу ваші додатки знаходяться в якомусь із наведених нижче станів. Система змінює стан вашої програми у відповідь на події, що відбуваються. Наприклад, коли користувач натискає кнопку Home, або надходить вхідний дзвінок, або що ще - програми у відповідь на все це змінюють свій стан.
Not Running: Додаток не запущено, або запущено, але перервано системою;
Inactive: Додаток працює, але зараз нічого не робить (це може бути пов'язане з виконанням іншого коду). Додаток, як правило, залишається в цьому стані дуже мало часу та переходить в інший стан;
Active: Нормальний звичайний режим роботи програми на передньому плані;
Background: Програма знаходиться на тлі, але працює. Більшість додатків входять у цей стан на короткий час і пізніше зупиняються. Але якщо потрібен додатковий час для роботи в бекграунді, програма може залишатися в цьому стані;
Suspended: Програма працює на тлі, але не виконує жодного коду. Система переміщає програму в цей стан автоматично і не попереджає про це. За умови малої кількості пам'яті, система може не попереджаючи закрити програми у цьому стані для звільнення пам'яті.
Більшість переходів між станами забезпечується відповідними методами AppDelegate.
Додаток має бути готовим до завершення в будь-який час. Завершення – це нормальна частина життєвого циклу. Система зазвичай вимикає програми для очищення пам'яті та підготовки до запуску інших програм, які запущені користувачем, але система також може вимкнути програми, які некоректно або не відповідають на події вчасно.
Suspended програми не отримують повідомлення про завершення. Система вбиває процес та відновлює відповідну пам'ять. Якщо програма запущена у фоні і не відповідає, система викличе applicationWillTerminate: щоб програма підготувалася до вимкнення. Система не викликає метод, коли пристрій перезавантажується.
Система створює програму в основному потоці і ви можете створювати окремі потоки, якщо вам це необхідно, для вирішення будь-яких завдань. Для додатків iOS, кращим методом є використання Grand Central Dispatch (GCD), що оперує з об'єктами, та іншими інтерфейсами асинхронного програмування, не створюючи та керуючи потоками власноруч. Такі технології, як GCD, дозволяють визначити роботу, яку ви хочете зробити і в якому порядку ви хочете її зробити, але нехай система вирішує як краще виконати цю роботу для CPU. Коли система управляє вашими потоками вам стає легше писати код, забезпечується більша коректність коду, а також збільшує загальну продуктивність.
Джерела:
Дод. матеріал: