Ответ
Reference types (классы, замыкания) хранятся в куче (heap), а переменные, содержащие ссылки на них, — в стеке (stack).
Почему так?
- Куча позволяет выделять память динамически и хранить объекты с неопределенным временем жизни.
- Стек хранит локальные переменные и указатели (адреса памяти), что обеспечивает быстрый доступ и автоматическое управление.
Пример:
class Person {
var name: String
init(name: String) { self.name = name }
}
// person1 в стеке хранит указатель на объект Person в куче
let person1 = Person(name: "Alice")
// person2 копирует ссылку, а не объект
var person2 = person1
person2.name = "Bob"
print(person1.name) // "Bob" — оба указателя ссылаются на один объект
Управление памятью: Swift использует ARC (Automatic Reference Counting) для автоматического освобождения памяти в куче, когда счетчик ссылок на объект становится нулевым.