我正在使用MVVM + ReactiveCocoa。
我的代码按预期工作。当我从父级移除ViewModel
时,ViewController
对象没有停留在“调试内存图”中。
与ViewController
不同,ViewModel
已取消初始化。
这是ViewModel
中按钮动作的外观:
var changeStatus: Action<Book.Status, Void, NoError> {
return Action<Book.Status, Void, NoError> { status -> SignalProducer<Void, NoError> in
return SignalProducer<Void, NoError> { [weak self] observer, error in
if let strongSelf = self {
strongSelf.status.value = status
observer.sendCompleted()
}
}
}
}
为ViewController
中的按钮分配操作:
reading.reactive.pressed = CocoaAction(viewModel.changeStatus, input: .reading)
reading
按钮也保留在内存中。
当我评论成功取消分配给按钮ViewModel
的操作时。因此,我得出的结论是这是问题所在。这条线是否有很强的参考意义?
亲爱的社区,有没有一种方法可以使用ReactiveCocoa添加按钮操作,以便及时删除ViewModel
对象?
答案 0 :(得分:0)
尝试一下。通过懒惰定义您的操作,您可以确保关闭操作不会保留。
lazy var changeStatus: Action<Book.Status, Void, NoError> = {
return Action<Book.Status, Void, NoError> { status -> SignalProducer<Void, NoError> in
return SignalProducer<Void, NoError> { [weak self] observer, error in
if let strongSelf = self {
strongSelf.status.value = status
observer.sendCompleted()
}
}
}
}()