Что такое ARC в Swift и для чего он нужен?

«Что такое ARC в Swift и для чего он нужен?» — вопрос из категории Управление памятью, который задают на 23% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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 минимальны и встроены в процесс компиляции.