闭包是否会创建对在闭包范围内创建的对象的强引用?
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 时才会发生。它是可选的很奇怪,而且可能不合适。早该解包了。
在这个例子中,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 时才会发生。它是可选的很奇怪,而且可能不合适。早该解包了。