Ответ
Нет. Экземпляры классов (reference types) всегда хранятся в куче (heap). В стеке хранятся лишь указатели (references) на эти объекты, а также value-типы (структуры, перечисления, примитивы).
Пример:
class MyClass { } // Reference type -> хранится в куче
struct MyStruct { } // Value type -> хранится в стеке (если не захвачен замыканием)
let object = MyClass() // Указатель `object` хранится в стеке, сам объект — в куче
let value = MyStruct() // Вся структура `value` хранится в стеке
Ключевые моменты:
- Куча позволяет объектам существовать за пределами scope функции и разделяться между ссылками.
- Стек работает по принципу LIFO и используется для локальных переменных и вызовов функций.
- Компилятор Swift может применять оптимизации (например, escape-анализ), чтобы временно разместить объект на стеке, если его lifetime ограничен текущей функцией. Это деталь реализации, не меняющая семантику языка.