我正在使用 MVVM + ReactiveCocoa。
我的代码按预期工作。当我从父级中删除 ViewController
时,除了 ViewModel
对象仍保留在“调试内存图”中。
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)
阅读
按钮也保留在内存中。
当我评论为按钮 ViewModel
成功取消初始化分配操作时。因此,我得出的结论是,这就是问题所在。这条线有可能保留强引用吗?
亲爱的社区,有没有办法使用 ReactiveCocoa 添加按钮操作,以便按时删除 ViewModel
对象?
最佳答案
试试这个。通过惰性定义您的操作,您可以确保其闭包不会被保留。
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()
}
}
}
}()
关于swift - ReactiveCocoa 内存泄漏 - UIButton 的 CocoaAction 阻止 MVVM 对象反初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53638920/