2016-12-07 7 views
2

Я создаю UIWindow и сделаю его ключом и виден в didFinishLaunching, а затем создайте еще один UIWindow, а также сделайте его ключевым и видимым. Я ожидаю, что первое окно будет оставлено и выпущено из памяти, а второе - для отображения. Но, как я вижу в отладчике (Иерархия отладки), они оба находятся в иерархии.Можно ли изменить окно ключа?

Нормально ли это?

UPDATE

Вопрос не почему оба объекта находятся в памяти. Я хотел бы знать, почему они оба находятся в иерархии представлений? И как я могу удалить одну из них?

Примечание: В ключевых окнах нет супервизоров, поэтому я не могу этого сделать, просто позвонив removeFromSuperview.

enter image description here

+0

Вы удаляете окно, удаляя все ссылки, чтобы оно было освобождено или сделало его скрытым. – dan

+0

@ Возможно, у меня все еще есть сильная ссылка. Но я также подозреваю, что первое окно захватывается самой иерархией. Как это происходит с представлением, когда вы добавляете его в иерархию представлений. Разве вы не думаете, что это случай? –

+0

Нет, представления в иерархии представлений сохраняются, потому что их супервизор сохраняет их. Окно без надзора не будет сохранено иерархией представлений. – dan

ответ

0

Если AppDelegate сохранить первое окно, он никогда не выпустит. И, конечно же, вы можете установить любое созданное окно как ключевое и видимое. Метод makeKeyAndVisible делает ключ окна и перемещает его перед любыми другими окнами с одинаковым уровнем.

+0

Благодарим вас за быстрый ответ. Я не очень хорошо ссылаюсь на первое окно в делегате приложения (возможно, хотя у меня есть это где-то еще ...). Но вопрос не в этом, извините за то, что он недостаточно ясно. Я обновил вопрос. Взгляни, пожалуйста. –