Этот вопрос проверяет знание процесса деинициализации объектов в ARC, включая этапы уменьшения счётчика ссылок и освобождения памяти.
В ARC деинициализация происходит, когда счётчик ссылок на объект становится нулём. Сначала вызывается деинициализатор (deinit), затем память освобождается. Если есть weak или unowned ссылки, они обнуляются или вызывают ошибку при обращении.
Процесс деинициализации в ARC состоит из нескольких шагов, которые ensure that memory is freed safely.
1. Этапы:
Когда счётчик сильных ссылок (strong references) достигает нуля, объект помечается к деинициализации.
Вызывается метод deinit, где можно выполнить cleanup (например, закрыть файлы).
Память, занятая объектом, освобождается.
Weak ссылки автоматически становятся nil, а unowned ссылки при обращении вызывают crash (так как объект уже удалён).
2. Важно:
Циклические ссылки могут предотвратить деинициализацию, поэтому нужно использовать weak или unowned.
Пример:
swift
class MyClass {
deinit {
print("Объект удалён")
}
}
var obj: MyClass? = MyClass()
obj = nil // Выведет "Объект удалён"