Хороший вопрос. Во-первых, для ясности: то, что вы называете «одним из методов Apple», упоминается в UIViewController Руководство по программированию как «косвенное представление» и включает в себя такие вещи, как модальное представление, выдвигаемое на навигацию. стек, представление поповерного контроллера и т. д. В основном все эти методы контроллера представления считаются «косвенными» методами представления, в то время как использование -addSubview: (что-то вроде [someView addSubview:myViewController.view]
) считается «прямым» представлением.
Из упомянутого руководства по программированию: (Giant Block Quote ...)
Рекомендуется использовать только
предложенные методы для
отображение просмотров вашего вида
контроллеры. Для того, чтобы представить и
правильно управлять представлениями, система
записывает каждый вид (и его
связанный контроллер вида), который вы
отображать прямо или косвенно. Это
использует эту информацию позже, чтобы сообщить
просматривать связанные с контроллером события на ваш
приложение. Например, когда
ориентация устройства меняется, окно
использует эту информацию для идентификации
контроллер вид спереди и уведомить
это из изменений. Если вы включите
просматривать вид контроллера на ваш
иерархия другими средствами (добавив его
как подвид к другому мнению
возможно) система предполагает, что вы хотите
управлять видом самостоятельно и делает
не отправлять сообщения связанным
просмотр объекта контроллера . (акцент мой)
Помимо вашей настройки вашего
начальный интерфейс приложения, большинство
другие взгляды представлены косвенно
через их контроллеры объектов просмотра.
Все это означает, что вы правы, полагая, что все эти сообщения UIViewController будут потрачены впустую, если вы просто добавите представление в иерархию представлений напрямую и не предпримете никаких других дальнейших действий (исключение составляет окно ключа). В этой цитате также упоминается, что чаще всего используется косвенное представление.
1) Я не решаюсь сделать общее заявление и сказать: «Да, во всех случаях глупо создавать подкласс UIViewController, если вы не представляете его косвенно». Я уверен, что где-то есть что-то хорошее для этого. Я позволю себе сказать, что лично я никогда не делал этого.
2) Безусловно, я бы не использовал здесь подкласс UIViewController.
3) Позвольте мне обратить ваше внимание на другую область Руководства по программированию:
В приложениях для iPhone, представления в
иерархия представления традиционно покрывает
весь экран ... Если вы хотите разделить
иерархия представления на несколько
подрайоны и управлять каждым
отдельно используйте универсальный контроллер
объекты (пользовательские объекты по убыванию
из NSObject) вместо просмотра
объекты контроллера для управления каждым
подзоны. Тогда используйте один вид
контроллер объекта для управления
универсальные объекты контроллера.
Это довольно четко синхронизируется с тем, что вы хотите здесь сделать. Вы мертвы с предложенным вами подходом. Этот «Экран настроек, запускаемый главным меню» должен управляться универсальным объектом контроллера, происходящим из NSObject, который, в свою очередь, управляется вашим полноэкранным подклассом UIViewController.