Self -> Task -> (strong) Self ....

Если объект хранит Task, а задача сильно захватывает объект, возможно удержание до завершения задачи. Уход назад сам по себе не гарантирует deinit ViewModel.

Короткий ответ

Что ответить на собеседовании

Если объект хранит Task, а задача сильно захватывает объект, возможно удержание до завершения задачи. Уход назад сам по себе не гарантирует deinit ViewModel.

Подробный разбор

Ответ с пояснениями

Условие

Self -> Task -> (strong) Self ....

Back -> View desinit -> View model deinit?

Ответ

Если объект хранит Task, а задача сильно захватывает объект, возможно удержание до завершения задачи. Уход назад сам по себе не гарантирует deinit ViewModel.

Важно отличать цикл ссылок от временного удержания работающей задачей. Конечная задача освобождает свои захваты после завершения; бесконечная или зависшая операция может сохранять объект надолго. [weak self] не помогает на весь срок, если затем guard let self удерживает его через await.

Нужно явно связать отмену с жизненным циклом экрана, а не надеяться только на deinit. Захватите сервис отдельно, а к self обращайтесь слабо после ожидания; проверяйте отмену перед обновлением UI. SwiftUI View обычно структура, поэтому схема «View deinit» не является универсальной моделью.

Источник: raw.githubusercontent.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее