Что делает установка rootViewController UIWindow?

Назначение контроллера представления этому свойству (программно или с помощью Interface Builder) устанавливает представление контроллера представления как представление содержимого окна.

Вышеупомянутая цитата взята из справочника UIWindow. Мой вопрос касается конкретной фазы:

"устанавливает представление контроллера представления как представление содержимого окна"

Что именно относится к просмотру содержимого?

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIWindow_Class/UIWindowClassReference/UIWindowClassReference.html


person Stanley    schedule 20.11.2011    source источник


Ответы (1)


До появления свойства rootViewController у большинства приложений в делегате приложения был такой код:

[window addSubview:viewController.view];
[window makeKeyAndVisible];

Этот код устанавливает представление контроллера представления в качестве основного представления, но экземпляр UIWindow не имеет ссылки на контроллер, владеющий этим представлением.

Когда вы используете свойство rootViewController, вам больше не нужно добавлять представление контроллера представления в экземпляр UIWindow, это делается автоматически. Таким образом, количество строк кода остается прежним, но теперь ваш UIWindow имеет ссылку на контроллер представления.

Итак, в более новых приложениях у нас теперь есть код, который выглядит следующим образом:

window.rootViewController = viewController;
[window makeKeyAndVisible];
person Can Berk Güder    schedule 20.11.2011
comment
+1 за исчерпывающий ответ с учетом исторических аргументов - person Till; 20.11.2011
comment
Спасибо за вашу любезную помощь - person Stanley; 20.11.2011
comment
Обратите внимание, что это доступно в 4.0+ - person d.lebedev; 21.11.2011
comment
@ CanBerkGüder, правда ли, что только rootviewcontroller получит функции обратного вызова, такие как didReceivememoryWarning? - person S.J; 03.05.2013
comment
@ S.J Каждый из контроллеров представления, переданных контроллеру навигации, получает вызов didReceivememoryWarning. Попробуйте сами и убедитесь. Реализуйте метод didReceivememoryWarning, пусть этот метод вызывает NSLog, а затем смоделирует состояние нехватки памяти в симуляторе iOS. - person Basil Bourque; 26.08.2013