> Как работает механизм управления памятью ARC в Swift (iOS, Swift)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: Битрикс24

Стек: iOS, Swift

> Пример ответа

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

Каждый объект класса имеет счётчик ссылок (reference count). Когда создаётся новая сильная ссылка (strong reference) на объект, счётчик увеличивается на 1. Когда ссылка исчезает (например, переменная выходит из области видимости), счётчик уменьшается. Когда счётчик достигает 0, объект немедленно деаллоцируется.

ARC автоматически управляет сильными ссылками, но разработчик должен избегать циклических ссылок (retain cycles), используя слабые (weak) или бесхозные (unowned) ссылки. Например, при работе с замыканиями, которые захватывают self, нужно явно указывать [weak self] или [unowned self].

Пример:

SWIFT
class Person {
let name: String
var apartment: Apartment?
init(name: String) { self.name = name }
deinit { print("\(name) deallocated") }
}
class Apartment {
let unit: String
weak var tenant: Person? // weak, чтобы избежать цикла
init(unit: String) { self.unit = unit }
deinit { print("Apartment \(unit) deallocated") }
}

В этом примере weak предотвращает retain cycle между Person и Apartment. ARC также оптимизирует производительность: он работает детерминированно (освобождение происходит сразу при обнулении счётчика) и не требует фоновых потоков для сборки мусора.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью