Ответ
Объект удаляется (деаллоцируется) в тот момент, когда его счетчик сильных (strong) ссылок достигает нуля. В ARC (Automatic Reference Counting) компилятор автоматически вставляет вызовы retain и release.
Типичные сценарии:
- Локальной переменной выходит из области видимости.
- Свойству класса или другой сильной ссылке присваивается
nilили новый объект. - Массив, словарь или другая коллекция, содержащая объект, удаляется или очищается.
- Цикл сильных ссылок (retain cycle) предотвращает обнуление счетчика, вызывая утечку памяти.
Пример:
class MyClass {}
func example() {
var strongRef: MyClass? = MyClass() // Retain count = 1
weak var observer = strongRef // Weak ссылка НЕ увеличивает счетчик
strongRef = nil // Retain count становится 0 -> объект немедленно удаляется.
// Ссылка `observer` автоматически становится `nil`.
}
Важно: Само удаление из памяти может произойти немедленно или быть отложенным, но логически объект считается несуществующим с момента обнуления счетчика.