簡體   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