Sobes.tech
Junior — Middle
80

Каким образом в Swift происходит управление и распределение памяти?

Companies where asked
МТСМТС
Яндекс БраузерЯндекс Браузер

Answer from AI

sobes.tech AI

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

Основные моменты:

  • ARC работает только с классами (reference types), а структуры и перечисления (value types) хранятся в стеке и копируются при присваивании.
  • Когда создаётся новая ссылка на объект, счётчик увеличивается.
  • Когда ссылка удаляется или становится nil, счётчик уменьшается.
  • Если счётчик достигает нуля, объект автоматически деинициализируется и память освобождается.

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

Пример:

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

var person1: Person? = Person(name: "Иван")
var person2 = person1 // счётчик ссылок увеличивается
person1 = nil // объект всё ещё жив, так как person2 ссылается
person2 = nil // теперь объект освобождается