闭包是否创建了对闭包作用域中创建的对象的强引用?



在这个例子中,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的情况下发生。可选是很奇怪的,而且可能是不合适的。

相关内容

  • 没有找到相关文章

最新更新