swift - 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
}
}
解决方案
推荐阅读
- vue.js - 每当我尝试访问 Vue 时,它都会返回未定义的 vm
- reactjs - 为我的 Web 应用程序设置检查过滤器问题
- java - 如何使 ActivityOptions 在工作流程中像它的生命周期一样动态
- xpath - 无法找到请求的元素:By.xpath: //*[@id="SF-Refresh"]
- c# - Xamarin.Android 中的文件提供程序异常
- angular - 角度 6 中的动态表单验证与条件,反之亦然
- r - 从 R 中的向量创建“可用”箱
- macos - 尽管没有容器运行,但 Docker 正在最大限度地利用 CPU,如何减少 docker 的 CPU 开销?
- python-3.x - Error message when appending data to pandas dataframe
- php - PhpStorm 代码样式“空格 - 内 - 括号”不起作用