Назад к вопросам
Middle
88
questionbank

Как хранятся типы значения и ссылочные типы в памяти?

Sobes Copilot

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

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

sobes.tech AI

Типы значения (struct, enum, tuple) хранятся в стеке. Копия данных создается при присваивании или передаче в функцию.

Ссылочные типы (class, func, Closure, Array, Dictionary, Set) хранятся в куче. В стеке хранится лишь ссылка на объект в куче. При присваивании или передаче копируется только ссылка, а не сам объект.

Пример структуры (тип значения):

struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2) // p1 в стеке
var p2 = p1 // p2 в стеке, это копия p1
p2.x = 10 // Меняется только копия в p2

Пример класса (ссылочный тип):

class Person {
    var name: String

    init(name: String) {
        self.name = name
    }
}

var person1 = Person(name: "Alice") // Объект Person в куче, person1 в стеке (ссылка на объект)
var person2 = person1 // person2 в стеке (еще одна ссылка на тот же объект в куче)
person2.name = "Bob" // Меняется свойство объекта, на который ссылаются person1 и person2

print(person1.name) // Выведет "Bob"