[英]Does closure create a strong reference to an object that is created inside closure scope?
在这个例子中,vm 和 targetVC 会被取消初始化吗? 它会导致内存泄漏吗?
loginModule.checkbox.checkboxAction = { [unowned self] in
let vm = HomeViewModel()
let targetVC = HomeViewController(viewModel: vm)
navigationController?.setViewControllers([targetVC], animated: true)
}
vm
和targetVC
都没有被捕获,因为它们是用闭包定义的。 他们喜欢任何旧的局部变量。
vm
不会被取消初始化,因为新的HomeViewController
保持对它的引用(我假设它是一个强引用,因为否则它没有意义。
targetVC
可能不会被取消初始化,因为navigationController
将持有对它的引用。 不过这里有一个奇怪的地方, navigationController
是可选的,所以这个集合只有在它不是 nil 时才会发生。 它是可选的很奇怪,而且可能不合适。 应该早点解开。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.