ViewModel с подпиской на таймер не освобождается после закрытия экрана
final class OfferViewModel: ObservableObject {
@Published var secondsLeft = 600
private var cancellables = Set<AnyCancellable>()
init() {
Timer.publish(every: 1, on: .main, in: .common).autoconnect()
.sink { _ in self.secondsLeft -= 1 }
.store(in: &cancellables)
}
deinit { print("OfferViewModel deinit") }
}
Экран акции закрыли, а deinit не печатается, таймер продолжает тикать. Почему?
- Цикл: self хранит подписку, подписка хранит self
- Timer.publish держит ViewModel через RunLoop
- Set<AnyCancellable> не освобождается сам
- @Published удерживает объект до отписки
