我正在使用MVVM结构,其中viewController通过绑定与viewModel通信,viewModel通过通知与Model通信。
我在函数级别创建了viewModels,这样一旦我完成它们就会被释放:
func getInformation(){
var viewModel = thisViewModel()
var requestStatus = customEnum.notRequested
viewModel.status.bind{
requestStatus = customEnum.notRequested
switch $0{
case .success:
self.data = viewModel.results
default: break
}
requestStatus = customEnum.Requested
}
然而,似乎他们的模型在函数退出之后仍然存在,并且在getInformation()
的几次调用之后我开始被响应淹没,表明内存泄漏(即每个仍然存在的模型仍在监听并响应到viewModel请求)。
一旦viewModel完成使用它们,我也会处理模型:
class thisViewModel {
var model: myModel!
init(){
model = myModel()
}
func getStuff(){
//Do cool stuff here
model = nil
}
}
我可以通过删除模型中的NotificationCenter观察者来避免响应重复,但是如何解决这导致的内存泄漏?
编辑:
通过将getInformation中的绑定更改为:
viewModel.status.bind { [weak requestStatus] in
我能够让模型开始解除分配但是viewModel仍然存在。我相信这是因为即使在函数结束后也需要绑定语句,但是一旦触发了一个switch case,就不再需要它了,所以它需要被释放。