Как осуществляется управление памятью для ссылочных типов в Swift?
Answer from AI
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 к ним не применяется.