【发布时间】:2021-03-16 01:20:41
【问题描述】:
设置:
我有一个ViewController ProblemView 和class A。我将ProblemView 传递给A 类,所以我可以继续工作。它看起来像这样(简化):
class ProblemView: UIViewController{
var instanceOfA = A()
instanceOfA.passView(passedVC: self)
}
class A{
var workOn = ProblemView()
func passView(passedVC: ProblemView){
workOn = passedVC
// I noticed, if I declare a varible locally like var workOn2 = passedVC, my problem is solved -
// but I need the variable globally, because I don't want to pass it around within this class
}
func doSth(){
// here I interact with variables of the passed ViewController
}
}
问题:每当我在应用程序中重新启动此进程时,内存每次都会增加,直到出现内存错误。
我尝试了什么:我在两个类中都添加了deinit。 class A 总是被取消初始化但class ProblemView 不是(这可能是问题?)。
我还发现,当我没有在全局范围内声明 workOn 而是在 passView 函数内声明时,它工作得很好。但我需要全局变量,因为我在A 的许多不同函数中使用它。有什么办法可以解决这个问题?
【问题讨论】:
-
每次创建 A 都会创建一个 ProblemView 的实例,这会创建一个新的 A 实例,这会创建一个新的 ProblemView 实例...很明显 this 是您的内存问题,与deinit无关。
-
感谢您的意见!有道理,但是当我不全局声明 ProblemView 的实例,而是在 passView 函数中本地声明时,为什么它会起作用?
标签: swift memory uiviewcontroller parameter-passing deinit