Типы данных в Swift хранятся в двух основных областях памяти: стеке и куче.
Стек
- Value types (значимые типы):
struct (структуры)
enum (перечисления)
- Базовые типы, такие как
Int, Double, Bool, String (короткие строки могут храниться прямо в стеке для оптимизации)
- Данные хранятся непосредственно в стеке в порядке выполнения функций.
- Выделение и освобождение памяти происходит автоматически и очень быстро (LIFO - Last In, First Out).
Куча
- Reference types (ссылочные типы):
class (классы)
- Функции и замыкания (Closures)
- Объекты (
AnyObject)
- В куче хранятся сами объекты, а в стеке — только ссылки на них.
- Выделение и освобождение памяти в куче происходит динамически и управляется системой (Automatic Reference Counting - ARC).
- Доступ к данным в куче косвенный, через указатель.
Особенности
- При присвоении значимого типа происходит копирование всего значения.
- При присвоении ссылочного типа копируется только ссылка, оба объекта указывают на один и тот же участок памяти в куче.
- ARC отслеживает количество сильных ссылок на объекты в куче и автоматически освобождает память, когда ссылок не остаётся.
swift