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

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 时才会发生。它是可选的很奇怪,而且可能不合适。早该解包了。