繁体   English   中英

闭包是否创建对在闭包范围内创建的对象的强引用?

[英]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)
 }

vmtargetVC都没有被捕获,因为它们是用闭包定义的。 他们喜欢任何旧的局部变量。

  • vm不会被取消初始化,因为新的HomeViewController保持对它的引用(我假设它是一个强引用,因为否则它没有意义。

  • targetVC可能不会被取消初始化,因为navigationController将持有对它的引用。 不过这里有一个奇怪的地方, navigationController是可选的,所以这个集合只有在它不是 nil 时才会发生。 它是可选的很奇怪,而且可能不合适。 应该早点解开。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM