Ссылка хранит адрес в памяти, указывающий на размещенные там данные. Фактически, переменная, хранящая ссылку, владеет только этим адресом, а не самими данными. Присваивание ссылочного типа переменной копирует ссылку, а не данные. Изменения данных, на которые указывает ссылка, отражаются во всех переменных, хранящих эту ссылку.
Тип значения хранит непосредственно сами данные. Присваивание типа значения переменной копирует сами данные. Изменения в одной переменной типа значения не влияют на другие переменные, получившие эту копию.
| Признак | Ссылочный тип | Тип значения |
|---|---|---|
| Хранение | Ссылка на данные | Сами данные |
| Присваивание | Копирование ссылки | Копирование данных |
| Изменение | Влияет на все ссылки | Не влияет на копии |
| Размещение | В куче (Heap) | В стеке (Stack) |
| Освобождение | ARC / Сборщик мусора | Автоматически при выходе из области видимости |
| Примеры в Swift | class, closure | struct, enum, tuple, базовые типы (Int, Bool, String и т.д.) |
swift