2016-12-07 5 views
2

Ich erstelle eine UIWindow und machen Sie es Schlüssel und sichtbar in didFinishLaunching und später erstellen Sie eine weitere UIWindow und machen Sie es auch Schlüssel und sichtbar. Ich erwarte, dass das erste Fenster verlassen wird und aus dem Speicher freigegeben wird und das zweite - um gezeigt zu werden. Aber wie ich im Debugger (Debug View Hierarchie) sehe, sind sie beide in der Hierarchie.Ist es in Ordnung, ein Schlüsselfenster zu ändern?

Ist das normal?

UPDATE

Die Frage ist nicht, warum beiden Objekte im Speicher befinden. Ich würde gerne wissen, warum beide in der View-Hierarchie sind? Und wie kann ich einen von ihnen entfernen?

Hinweis: Schlüsseldisplays haben keine Superviews, daher kann ich das nicht tun, indem ich einfach removeFromSuperview anrufe.

enter image description here

+0

Sie entfernen ein Fenster, indem Sie entweder alle Referenzen entfernen, so dass es freigegeben wird oder es ausgeblendet wird. – dan

+0

@dan ist es möglich, dass ich irgendwo noch eine starke Referenz habe. Aber ich vermute auch, dass das erste Fenster von der Hierarchie selbst erfasst wird. Wie bei einer Ansicht, wenn Sie sie zur Ansichtshierarchie hinzufügen. Denkst du nicht, dass es ein Fall ist? –

+0

Nein, Ansichten in der Ansichtshierarchie bleiben erhalten, weil ihre Superview sie behält. Ein Fenster ohne Superview wird von der Ansichtshierarchie nicht beibehalten. – dan

Antwort

0

Wenn Ihr AppDelegate erste Fenster behalten, wird es nie loslassen. Und natürlich können Sie jedes erstellte Fenster als Schlüssel und sichtbar definieren. Die Methode makeKeyAndVisible erstellt eine Fenster-Taste und verschiebt sie vor anderen Fenstern derselben Ebene.

+0

Vielen Dank für die schnelle Antwort. Ich behalte keinen starken Hinweis auf das erste Fenster im App-Delegierten (vielleicht, obwohl ich es woanders habe ...). Aber die Frage geht nicht darum, tut mir leid, dass ich es nicht klar genug gemacht habe. Ich habe die Frage aktualisiert. Bitte schau es dir an. –

Verwandte Themen