Ответ
Статические переменные (объявленные с ключевым словом static) хранятся в области памяти, называемой сегментом данных (Data Segment/BSS). Это память, выделяемая при запуске приложения и существующая до его завершения.
Ключевые характеристики:
- Время жизни: Существуют на протяжении всей работы программы. Инициализируются один раз (лениво, при первом обращении, если не указано иное).
- Область видимости: Ограничена областью видимости типа (класса, структуры, перечисления), в котором они объявлены.
- Потокобезопасность: Инициализация по умолчанию потокобезопасна в Swift.
Примеры и использование:
-
Статическое свойство типа:
class AppSettings { static let version = "1.0.0" // Хранится в data segment static var launchCount = 0 // Хранится в data segment, значение сохраняется между запусками (если его записать в UserDefaults) } print(AppSettings.version) // Обращение через имя типа -
Локальная статическая переменная в функции:
func generateUniqueID() -> Int { static var counter = 0 // Хранится в data segment, но видима только внутри этой функции counter += 1 return counter } print(generateUniqueID()) // 1 print(generateUniqueID()) // 2 // Значение сохраняется между вызовами! -
classдля вычисляемых свойств в классах (только для классов):class AbstractShape { class var defaultColor: String { return "black" } // Может быть переопределен в подклассе static let immutableID = "SHAPE" // Не может быть переопределен }
Важное отличие от глобальных переменных: Статические переменные инкапсулированы внутри типа, что предотвращает загрязнение глобального пространства имен и улучшает организацию кода.