Ответ
ARC (Automatic Reference Counting) — это система автоматического управления памятью в Swift, которая отслеживает и подсчитывает сильные ссылки на экземпляры классов. Когда счетчик сильных ссылок на объект достигает нуля, ARC автоматически освобождает занимаемую им память.
Основная цель: избавить разработчика от ручного управления памятью (как в ручном подсчете ссылок — MRC), минимизируя риски утечек памяти и висячих указателей.
Пример работы:
class Person {
let name: String
init(name: String) { self.name = name }
deinit { print("(name) освобожден") }
}
var person1: Person? = Person(name: "Alice") // Счетчик ссылок (RC) = 1
var person2 = person1 // RC = 2 (добавилась сильная ссылка)
person1 = nil // RC = 1
person2 = nil // RC = 0 → объект уничтожается, вызывается deinit
Ключевые особенности и нюансы:
- Работает только с классами: ARC не применяется к типам-значениям (структурам и перечислениям).
- Циклические ссылки: ARC не может автоматически разорвать циклы сильных ссылок между объектами. Для их предотвращения используются
weak(слабая) илиunowned(бесхозная) ссылки. - Производительность: Накладные расходы ARC минимальны и встроены в процесс компиляции.