Value types (например, struct, enum, основные числовые типы) хранят свое значение напрямую. При присваивании или передаче в функцию создается копия значения.
Reference types (например, class, function, closure) хранят ссылку на место в памяти, где находится само значение. При присваивании или передаче создается копия ссылки, указывающая на то же самое значение в памяти.
Основные отличия:
| Характеристика | Value Type | Reference Type |
|---|---|---|
| Способ хранения | Значение хранится непосредственно в переменной | Переменная хранит ссылку на значение |
| Присваивание | Копируется значение | Копируется ссылка (указывают на один объект) |
| Изменение | Изменение копии не влияет на оригинал | Изменение по ссылке влияет на оригинал |
| Место в памяти | Обычно стек (для локальных переменных) | Обычно куча |
| Управление памятью | Автоматическое (при выходе из области видимости) | ARC (Automatic Reference Counting) |
Пример на Swift:
swift