Ответ
В ARC объект уничтожается (деинициализируется) в момент, когда количество сильных (strong) ссылок на него становится равным нулю.
Основные сценарии:
- Удаление последней сильной ссылки: Присвоение
nilпеременной или свойству, которое было последней сильной ссылкой на объект. - Выход из области видимости: Локальная переменная, удерживающая объект, уничтожается при завершении выполнения области (например, функции).
- Обнуление weak-ссылки: Если объект удерживался только через
weak-ссылку, он уничтожается немедленно. Самаweak-ссылка автоматически становитсяnil.
Пример:
class MyClass {
deinit { print("Объект уничтожен") }
}
func testScope() {
let obj = MyClass() // retain count = 1
} // Выход из области видимости -> release -> deinit
var strongRef: MyClass? = MyClass() // retain count = 1
weak var weakRef = strongRef // retain count не увеличивается
strongRef = nil // retain count становится 0 -> deinit. weakRef автоматически становится nil
Почему это важно: Понимание момента деинициализации критично для предотвращения утечек памяти и корректного освобождения ресурсов (закрытия файлов, остановки таймеров) в методе deinit.