簡體   English   中英

我的viewcontroller在show segue之后沒有被取消初始化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM