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

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

Sobes Copilot

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

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

sobes.tech AI

Типы значения (Value Types) при присваивании или передаче в функцию копируются. Каждый экземпляр имеет свою собственную копию данных.

Типы ссылок (Reference Types) при присваивании или передаче в функцию передается ссылка на один и тот же экземпляр данных. Изменение данных через одну ссылку отразится на всех других ссылках на этот же экземпляр.

Характеристика Тип значения (Value Type) Тип ссылки (Reference Type)
Поведение при передаче/присваивании Копирование Передача ссылки
Размещение в памяти Стек (Heap) Куча (Stack)
Управление памятью Автоматическое (через стек) Автоматическое (ARC)
Примеры в Swift struct, enum, tuple class, func, closure
// Пример Value Type (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 получает копию p1
p2.x = 10   // Изменение p2 не влияет на p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// Пример Reference Type (Class)
class Coordinate {
    var x: Int
    var y: Int
    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

var c1 = Coordinate(x: 1, y: 2)
var c2 = c1 // c2 ссылается на тот же экземпляр, что и c1
c2.x = 10   // Изменение c2 влияет на c1, так как они ссылаются на один объект
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10