Ответ
Счетчик сильных ссылок (retain count) уменьшается автоматически в следующих случаях:
- Когда переменная выходит из области видимости (например, завершается функция, в которой она была объявлена).
- Когда переменной присваивается
nilили другой объект. - Когда объект-владелец (например, массив или другой класс) деаллоцируется или удаляет ссылку.
Почему это важно? 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.