Когда в ARC (Swift) уменьшается счетчик сильных ссылок на объект?

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

Ответ

Счетчик сильных ссылок (retain count) уменьшается автоматически в следующих случаях:

  1. Когда переменная выходит из области видимости (например, завершается функция, в которой она была объявлена).
  2. Когда переменной присваивается nil или другой объект.
  3. Когда объект-владелец (например, массив или другой класс) деаллоцируется или удаляет ссылку.

Почему это важно? ARC освобождает память, как только счетчик достигает нуля, предотвращая утечки.

Пример:

class MyClass {
    deinit { print("Объект деаллоцирован") }
}

var strongRef1: MyClass? = MyClass() // Retain count = 1
var strongRef2 = strongRef1 // Retain count = 2 (присваивание)

strongRef1 = nil // Retain count = 1
strongRef2 = nil // Retain count = 0 -> вызывается deinit

Ключевой вывод: ARC управляет подсчетом автоматически, но разработчик должен избегать сильных циклических ссылок с помощью weak или unowned.