Ответ
Момент инициализации зависит от языка и контекста:
В Swift (глобальные и статические свойства)
- По умолчанию (ленивая инициализация): При первом обращении. Это потокобезопасно.
- Использование
@objcилиdynamic: Может инициализироваться при загрузке класса, аналогично Objective-C.
class MyClass {
static let shared = MyClass() // Инициализируется при первом вызове MyClass.shared
static var count: Int = 0 // Инициализируется при первом обращении к MyClass.count
@objc static let constant = "Value" // Может быть инициализирована на этапе загрузки
}
В Objective-C
- Статические переменные внутри функций (
static): Инициализируются при первом вызове функции. - Глобальные статические переменные (вне функций): Инициализируются до вызова
main()или в момент загрузки модуля (фаза+loadили+initialize).
Важно: Порядок инициализации статических объектов между модулями не гарантирован. Циклические зависимости могут привести к неопределенному поведению.