Программа
Суть
Программа = данные + алгоритмы, упакованные в исполняемый файл: она принимает вход (касания, сеть, файлы), преобразует его и выдаёт результат (экран, запись на диск, запрос). Процессор понимает только машинные инструкции и байты, поэтому всё остальное — числа, строки, объекты — это абстракции, которые компилятор и рантайм отображают на память.
Что такое программа на iOS
- Бандл
.app: Mach-O-бинарник,Info.plist, ресурсы (ассеты, сториборды, локализации), фреймворки. Подписан сертификатом — иначе система не запустит. - Точка входа:
@mainна типеApp(SwiftUI) илиUIApplicationDelegate; компилятор генерирует функциюmain, которая вызываетUIApplicationMain. - Процесс: при запуске
dyldзагружает бинарник и динамические библиотеки, создаётся главный поток с run loop, который ждёт события (касания, таймеры, сеть) и раздаёт их коду. Приложение — это один процесс, расширения (виджеты, share extension) — отдельные. - Жизненный цикл: not running → inactive → active → background → suspended. В фоне у приложения считанные секунды, затем система его замораживает и может выгрузить при нехватке памяти.
import SwiftUI
@main
struct DevPrepApp: App { // точка входа: компилятор генерирует main()
var body: some Scene {
WindowGroup { ContentView() }
}
}
struct ContentView: View {
var body: some View { Text("Hello") }
}
Статическое и динамическое
- Статическое — то, что есть в бинарнике: код, типы, ресурсы.
- Динамическое — то, что существует только во время работы: объекты в куче, стек вызовов, открытые соединения, состояние UI. Именно оно теряется, когда система убивает процесс, поэтому состояние сохраняют на диск (UserDefaults, SwiftData, файлы) и восстанавливают при следующем запуске.
На что смотрит интервьюер
Понимаете ли вы, что ваш код не «крутится» сам по себе: его вызывает run loop главного потока в ответ на события, и всё тяжёлое на этом потоке блокирует UI. Это мост к темам многопоточности и жизненного цикла приложения.