Вопрос проверяет понимание принципов работы ARC и управления памятью.
deinit вызывается только тогда, когда счетчик сильных ссылок объекта становится равен нулю. Наличие хотя бы одной сильной ссылки предотвращает деинициализацию. Слабые и unowned-ссылки не влияют на этот момент. ARC автоматически отслеживает количество сильных ссылок.
Момент вызова deinit полностью определяется ARC.
ARC отслеживает количество сильных ссылок.
Каждая strong ссылка увеличивает счетчик
Освобождение ссылки уменьшает счетчик
weak и unowned не учитываются
deinitОпределение:deinit вызывается в момент, когда количество сильных ссылок на объект становится равно нулю.
Это означает:
Объект больше никому не нужен
Нет активных владельцев
Память может быть освобождена
Если объект удерживается:
ViewController
Coordinator
Замыканием
deinit вызовется только после освобождения всех трех ссылок.
deinit — это финальная точка жизненного цикла объекта. Он вызывается строго после освобождения всех сильных ссылок и никогда раньше.