Долгий for await в Task, сильно захвативший self, удерживает контроллер; используйте weak, break при nil, и cancel при уходе с экрана.
Разбор
- Проверяйте cancellation в циклах.
- Не игнорируйте
Task.isCancelled.
- Подписки на Notification/AsyncStream — классика утечек.
- Симптом: deinit не вызывается после pop.
Итог
Async-циклы требуют той же дисциплины владения, что и escaping callbacks.