Ответ
Automatic Reference Counting (ARC) — это механизм Swift для управления памятью, который автоматически подсчитывает сильные (strong) ссылки на экземпляры классов.
Принцип работы:
- При создании сильной ссылки на объект его счетчик ссылок (retain count) увеличивается на 1.
- Когда ссылка выходит из области видимости или ей присваивается
nil, счетчик уменьшается на 1. - Когда счетчик достигает нуля, память, занятая объектом, немедленно освобождается, и вызывается его деинициализатор
deinit.
Пример:
class Person {
let name: String
init(name: String) { self.name = name; print("(name) создан") }
deinit { print("(name) удален") }
}
var reference1: Person? = Person(name: "Анна") // Счетчик = 1
var reference2: Person? = reference1 // Счетчик = 2 (новая сильная ссылка)
reference1 = nil // Счетчик = 1
reference2 = nil // Счетчик = 0 -> Срабатывает deinit, объект удален
// В консоли:
// Анна создан
// Анна удален
Важные нюансы:
- ARC учитывает только сильные ссылки. Слабые (weak) и бесхозные (unowned) ссылки не увеличивают счетчик.
weak: Используется для избежания циклов сильных ссылок. Становитсяnil, когда объект уничтожается. Всегда объявляется какvarиoptional.unowned: Предполагает, что объект будет существовать дольше ссылки. Не становитсяnil(при обращении к разрушенному объекту приведет к крашу).