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