Используется ли в iOS сборщик мусора для управления памятью?

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

Ответ

Нет. В экосистеме Apple (iOS, macOS и др.) для управления памятью объектов используется Automatic Reference Counting (ARC), а не традиционный фоновый сборщик мусора.

Как работает ARC: Компилятор автоматически вставляет вызовы retain (увеличивает счётчик) и release (уменьшает счётчик) в код. Когда счётчик ссылок на объект достигает нуля, память освобождается немедленно и детерминировано.

class DataCache {
    var data: [String]
    init(data: [String]) {
        self.data = data
        print("Кэш создан")
    }
    deinit {
        print("Кэш удалён") // Вызовется сразу при обнулении последней ссылки
    }
}

func process() {
    let cache = DataCache(data: ["a", "b"]) // retainCount = 1
    // ... используем cache
} // cache выходит из области видимости, retainCount = 0 -> deinit

Преимущества ARC перед сборщиком мусора в контексте iOS:

  • Нет пауз (STW): Не прерывает главный поток, критично для плавного UI.
  • Детерминированность: Ресурсы (память, файлы, сетевые соединения) освобождаются предсказуемо.
  • Эффективность: Нагрузка распределена по времени компиляции и выполнения, а не вынесена в отдельный фоновый процесс.

Важно: ARC работает только с классами (reference types). Для предотвращения циклических ссылок используются модификаторы weak и unowned.