Назад к вопросам
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