Назад к вопросам
Junior
105
questionbank

В чем заключается отличие между ссылочными типами и типами значения?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Ссылка хранит адрес в памяти, указывающий на размещенные там данные. Фактически, переменная, хранящая ссылку, владеет только этим адресом, а не самими данными. Присваивание ссылочного типа переменной копирует ссылку, а не данные. Изменения данных, на которые указывает ссылка, отражаются во всех переменных, хранящих эту ссылку.

Тип значения хранит непосредственно сами данные. Присваивание типа значения переменной копирует сами данные. Изменения в одной переменной типа значения не влияют на другие переменные, получившие эту копию.

Признак Ссылочный тип Тип значения
Хранение Ссылка на данные Сами данные
Присваивание Копирование ссылки Копирование данных
Изменение Влияет на все ссылки Не влияет на копии
Размещение В куче (Heap) В стеке (Stack)
Освобождение ARC / Сборщик мусора Автоматически при выходе из области видимости
Примеры в Swift class, closure struct, enum, tuple, базовые типы (Int, Bool, String и т.д.)
// Пример ссылочного типа (класс)
class ReferenceType {
    var value: Int
    init(value: Int) {
        self.value = value
    }
}

let ref1 = ReferenceType(value: 10)
let ref2 = ref1 // Копируется ссылка
ref2.value = 20 // Изменяются данные, на которые указывает ref1 и ref2
print(ref1.value) // Вывод: 20
print(ref2.value) // Вывод: 20

// Пример типа значения (структура)
struct ValueType {
    var value: Int
}

var val1 = ValueType(value: 10)
var val2 = val1 // Копируются данные
val2.value = 20 // Изменяются только данные в val2
print(val1.value) // Вывод: 10
print(val2.value) // Вывод: 20