【发布时间】:2018-12-05 18:51:45
【问题描述】:
我正在使用 MVVM + ReactiveCocoa。
我的代码按预期工作。当我从父级删除ViewController 时,除了ViewModel 对象一直停留在“调试内存图”中。
ViewController deinited,不像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 对象?
【问题讨论】:
-
该行保持对
viewModel.changeStatus的强引用(而不是viewModel本身),并且应该在reading按钮被取消初始化时释放该引用。你提到ViewControllerdeinited: 是reading肯定也被deinited 了吗? -
@jjoelson,好点,
reading按钮保留在内存中。我会将此添加到我的问题中。
标签: swift mvvm uibutton reactive-cocoa