我注意到,即使没有使用弱/无人使用,这也会触发deinit块。我简化了代码以显示正在发生的事情。
final class ViewModel: ObservableObject {
@Published var isLoading = false
private var cancellables: [AnyCancellable] = []
var randomPublisher: AnyPublisher<Void, Never> {
Just(()).eraseToAnyPublisher()
}
func someAction() {
randomPublisher.sink { completion in
self.isLoading = false
switch completion {
case .finished:
break
}
} receiveValue: { _ in }
.store(in: &cancellables)
}
}
struct SampleView: View {
@StateObject private var viewModel = ViewModel()
}
我认为在调用someAction()
时会有一个参考周期,因为在订阅中捕获了self,而viewmodel持有订阅数组。当视图被关闭时,它可以成功访问deinit块,为什么会这样,而在其他视图模型中,我需要在同一位置使self变弱?