2016-12-07 34 views
2

我創建了一個UIWindow,並使其成爲鑰匙並在didFinishLaunching中可見,然後再創建另一個UIWindow並使其成爲鑰匙和可見。我期望第一個窗口被放棄並從內存中釋放,第二個窗口將被顯示。但正如我在調試器(調試視圖層次)中看到的,它們都處於層次結構中。可以更改關鍵窗口嗎?

這是正常的嗎?

UPDATE

的問題不在於爲什麼兩個對象都是在內存中。我想知道爲什麼他們都在視圖層次?我怎樣才能從那裏刪除其中的一個?

注意:關鍵窗口沒有超級視圖,所以我不能通過簡單地調用removeFromSuperview來實現。

enter image description here

+0

您可以通過刪除所有引用來刪除窗口,以便將其解除分配或隱藏。 – dan

+0

@dan我可能還有一個很強的參考。但我也懷疑第一個窗口被層次結構本身捕獲。就像在將視圖添加到視圖層次結構時發生的那樣。你不覺得這是一個案子嗎? –

+0

不,視圖層次結構中的視圖將保留,因爲它們的超級視圖正在保留它們。沒有超視圖的窗口不會被視圖層次結構保留。 – dan

回答

0

如果您AppDelegate保留第一個窗口,它永遠不會釋放。當然,您可以將任何創建的窗口設置爲關鍵和可見。 makeKeyAndVisible方法創建一個窗口鍵並將其移動到任何其他具有相同級別的窗口之前。

+0

謝謝你的快速回答。我沒有強烈地提到應用程序委託中的第一個窗口(也許,雖然我確實有其他地方...)。但問題不在於此,抱歉不夠明確。我更新了這個問題。請看一下。 –

相關問題