Итак, разберемся что такое Value Type и Reference Type и чем стек отличается от кучи.
В Swift есть две категории типов:
- Value Type (Тип значения) — каждый экземпляр хранит уникальную копию своих данных. То есть происходит создание нового экземпляра (копии) при присвоении значения переменной/константе или при передаче экземпляра в функцию.
- Reference Type (Ссылочный тип) — каждый экземпляр использует одну копию данных. То есть сохраняется/возвращается ссылка на тот же экземпляр при присвоении значения переменной/константе или при передаче экземпляра в функцию.
Давайте разделим типы в Swift на две категории:
| Тип значения | Ссылочный тип |
| Int | Функции |
| Double | Замыкания |
| String | Классы |
| Array | |
| Dictionary | |
| Set | |
| Struct | |
| Enum | |
| Tuple |
- Экземпляры ссылочного типа (Reference Type), например, функции или классы хранятся в управляемой динамической памяти — куче (heap).
- Экземпляры типа значения (Value Type), такие, как структура или массив, находятся в области памяти, называемой стеком (stack).
Существует одно важное замечание — если экземпляр типа значения является частью экземпляра ссылочного типа, то значение сохраняется в куче вместе с экземпляром ссылочного типа. Например, структура сама по себе хранится в стеке, но если эта структура расположена в классе, то так как класс хранится в куче, то и структура будет сохранена в куче.
Стек используется для распределения статической памяти, а куча — для распределения динамической памяти, которая хранятся в оперативной памяти компьютера.
Больше информации:
- Difference between value type and a reference type in iOS swift?
- Value and Reference Types
- Управление памятью в Swift
Выразить благодарность или найти уникальный материал вы можете в boosty.
Подписывайтесь на мой Telegram-канал iOS Interview Channel, чтобы не пропустить новый материал.