ReactiveCocoa内存泄漏-UIButton的CocoaAction防止MVVM对象取消初始化

时间:2018-12-05 18:51:45

标签: swift mvvm uibutton reactive-cocoa

我正在使用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对象?

1 个答案:

答案 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()
            }
        }
    }
}()