可以更改关键窗口吗?
问题描述:
我创建了一个UIWindow
,并使其成为钥匙并在didFinishLaunching
中可见,然后再创建另一个UIWindow
并使其成为钥匙和可见。我期望第一个窗口被放弃并从内存中释放,第二个窗口将被显示。但正如我在调试器(调试视图层次)中看到的,它们都处于层次结构中。可以更改关键窗口吗?
这是正常的吗?
UPDATE
的问题不在于为什么两个对象都是在内存中。我想知道为什么他们都在视图层次?我怎样才能从那里删除其中的一个?
注意:关键窗口没有超级视图,所以我不能通过简单地调用removeFromSuperview
来实现。
答
如果您AppDelegate
保留第一个窗口,它永远不会释放。当然,您可以将任何创建的窗口设置为关键和可见。 makeKeyAndVisible
方法创建一个窗口键并将其移动到任何其他具有相同级别的窗口之前。
+0
谢谢你的快速回答。我没有强烈地提到应用程序委托中的第一个窗口(也许,虽然我确实有其他地方...)。但问题不在于此,抱歉不够明确。我更新了这个问题。请看一下。 –
您可以通过删除所有引用来删除窗口,以便将其解除分配或隐藏。 – dan
@dan我可能还有一个很强的参考。但我也怀疑第一个窗口被层次结构本身捕获。就像在将视图添加到视图层次结构时发生的那样。你不觉得这是一个案子吗? –
不,视图层次结构中的视图将保留,因为它们的超级视图正在保留它们。没有超视图的窗口不会被视图层次结构保留。 – dan