Вопрос проверяет умение диагностировать утечки памяти и понимать жизненный цикл объектов в iOS.
Корректное удаление объекта из памяти означает, что ARC освободил его и вызвался deinit. Самый простой способ проверки — лог в deinit. Также используют инструменты Xcode, такие как Memory Graph и Instruments. Если deinit не вызывается, объект где-то удерживается.
Понимание того, освобождается ли объект, критично для стабильности и производительности приложения.
Определение:
Объект считается корректно удаленным, если при завершении его жизненного цикла вызывается deinit.
Самый простой прием:
deinit {
print("Object deallocated")
}
Если сообщение появляется:
объект больше не удерживается
ARC корректно освободил память
Для более сложных случаев используют:
Memory Graph Debugger — показывает, какие объекты находятся в памяти и кто их удерживает
Instruments (Leaks, Allocations) — помогает находить утечки при длительном использовании
Чаще всего проблема связана с:
retain cycle
сильными ссылками в замыканиях
подписками, которые не были отменены
Регулярная проверка deinit и использование Memory Graph позволяют рано обнаруживать утечки памяти.