首页 > 解决方案 > MVP - 在 iOS 中关闭时从 View Controller 中销毁 Presenter 对象

问题描述

我在这里关注示例快速应用 MVP 模式。当我关闭我的视图控制器时,演示者没有被破坏,视图控制器也保留在内存中。

当我尝试使演示者对象“弱”时,代码在这一行中断。

presenter.login(email: "email", password: "password")

如何正确声明和销毁演示者实例。谢谢

标签: swiftmemory-leaksmvp

解决方案


在您的代码中,Presenter您创建对网络的请求并在不使用弱引用或无主引用的情况下捕获自我。因此,存在一个保留周期。您可以在此处阅读有关保留周期的更多信息。

更新代码:

func login(email: String, password: String)
{
    self.view.showProgress()

    FoodAPI.api.login(email: email, password: password) { [weak self] (msg, user) in
        guard let `self` = self else {
            return
        }
        DispatchQueue.main.async {
            self.view.hideProgress()
            if let user = user
            {
                AppDelegate.shared.user = user
                UserDefaultsHelper.saveUser(user: user)
                self.view.openMenu() //this line will dismiss the VC and presents next one. 
            }else
            {
                self.view.showAlert(message: msg)
            }
        }
    }
}

如果你想了解MVP模式的高级用法,你可以在这里查看我的开放项目,并随时问我任何问题。


推荐阅读