![](/img/trans.png)
[英]UIViewControllerTransitioningDelegate being deinitialized immediately after it is presented
[英]My viewcontroller is not being deinitialized after show segue
我創建了兩個視圖控制器,每個控制器都有一個按鈕,可以顯示另一個視圖控制器的segue。
var counter = 0
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
counter += 1
print("init viewc \(counter)")
}
deinit {
counter -= 1
print("deinit viewc \(counter)")
}
}
似乎deinit永遠不會被調用,每次我返回ViewController時,計數器都在增加:
init viewc 1
init viewc 2
init viewc 3
等等......我在這里錯過了什么嗎? 我認為show segue應該從內存中釋放調用者,因為它不再需要。 我現在每次創建時都會創建新的ViewController對象嗎?
由於您使用的是“show”segue,因此每次都要創建一個新的視圖控制器實例,從而有效地呈現頂級視圖控制器的“堆棧”。
如果要在視圖控制器的單個實例之間前后切換,則可以使用容器視圖控制器,例如UITabBarController
或使用UINavigationController
並操作viewControllers
屬性
如果你試圖放棄一個想要保留的view controller
,並且你不打算做一個unwind segue
並返回到一個先前的view controller
的最新狀態,並且你想要釋放一個先前的視圖控制器,然后您基本上將后一個視圖控制器之一視為新的rootViewController
,直到您在AppDelegate
上重新分配根視圖控制器屬性,由於rootViewController
具有強引用,因此第一個視圖控制器將不會被釋放。它。
UIApplication.shared.keyWindow?.rootViewController = VCTwo
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.