首页 > 解决方案 > UIViewController 在关闭后没有被释放

问题描述

我有一个 MainViewController 并展示了另一个视图控制器 VC1。从 VC1 我将展示另一个视图控制器 VC2。我正在使用闭包从 VC2->VC1->MainViewController 传递日期。

VC2->VC1 值已通过且 VC2 已解除 VC1->MainViewController 值已通过且 VC1 已解除

一旦 MainViewController 从 VC2 接收到数据,它就会推送另一个视图控制器 VC3。

UIViewController VC2 关闭后未取消初始化。我在 VC2 中接收到套接字数据,即使它被解除并且值重复传递给 MainViewController。并且 MainViewController 多次推送 VC3。

class MainViewController: UIViewController {

    @objc func goToVC1() {
        let vc1 = VC1()
        vc1.callBack = { [weak self] result in
            let vc3 = VC3()
            vc3.result = result
            self?.navigationController?.pushViewController(vc3, animated: true)
        }
    }
}
class VC1: UIViewController {

    var callBack: ((String)->Void)?

    @objc func goToVC2() {
        let vc2 = VC2()
        vc2.callBack = { [weak self] result in
            self?.callBack?(result)
            self?.dismiss(animated: false, completion: nil)
        }
    }
    @objc func gotDataHere(_ string: String) {
        self.callBack?(string)
        self.dismiss(animated: false, completion: nil)
    }
}
class VC2: UIViewController {

    var callBack: ((String)->Void)?

    @objc func methodCalledRepeatedly(_ string: String) {
        self.callBack?(string)
        self.dismiss(animated: true, completion: nil)
    }
}
class VC3: UIViewController {
    var result: String?
    override func viewDidLoad() {
        super.viewDidLoad()
        print(result)//Printed repeatedly
    }
}

标签: swiftuiviewcontroller

解决方案


推荐阅读