Sobes.tech
Назад к вопросам
Middle
173

Как осуществляется управление памятью для ссылочных типов в Swift?

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

sobes.tech AI

В Swift управление памятью для ссылочных типов (классов) осуществляется с помощью автоматического подсчёта ссылок (ARC, Automatic Reference Counting). Каждый объект в куче хранит счётчик ссылок — количество активных ссылок на этот объект. Когда создаётся новая ссылка на объект, счётчик увеличивается, а когда ссылка перестаёт использоваться — уменьшается. Как только счётчик достигает нуля, объект автоматически удаляется из памяти.

Пример:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var a: Person? = Person(name: "Alice") // счетчик = 1
var b = a                             // счетчик = 2
b = nil                              // счетчик = 1
a = nil                              // счетчик = 0, объект удаляется

Важно избегать циклических ссылок (retain cycles), когда два объекта ссылаются друг на друга, что мешает освобождению памяти. Для этого используются слабые (weak) и безвладельческие (unowned) ссылки.

Значимые типы (структуры, перечисления) хранятся в стеке и копируются при присваивании, поэтому ARC к ним не применяется.