ARC快速内存泄漏

时间:2017-12-08 22:52:34

标签: swift memory-management mvvm memory-leaks automatic-ref-counting

我正在使用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,就不再需要它了,所以它需要被释放。

0 个答案:

没有答案