Для чего собственно оконные контроллеры?
Контроллеры окон - это инструменты для загрузки окна из файла NIB и для управления памятью ресурсов, выделенных в NIB. До того момента, когда NSWindowControllers
нужно было написать один и тот же код для каждого окна или изобрести собственный класс оконного контроллера.
Конечно, они также являются контроллерами в смысле Модель / Представление / Контроллер, поэтому они являются подходящим местом для соединения видов из окна с объектами модели. Для этого им часто нужно выступать в качестве делегата или источника данных для объекта представления. Итак, вы правильно поняли эту часть.
Также оконные контроллеры являются инструментом для повторного использования кода. Это позволяет легко удалить класс оконного контроллера и его XIB / NIB в другой проект и использовать его там.
Так что да, каждое окно из NIB должно принадлежать оконному контроллеру, за одним исключением. На самом деле, это всего лишь руководство к хорошему коду, ничего не навязывает.
WindowControllers и MainMenu.xib
MainMenu.xib
- это совсем другое, здесь вы не можете использовать оконный контроллер. Этот NIB загружается NSApplication
, поэтому это должен быть «Владелец файлов». Невозможно получить оконный контроллер между NSApplication
и NIB. Также нет необходимости использовать оконный контроллер для управления памятью, поскольку объект приложения живет в течение всего времени выполнения программы, поэтому ему не нужно очищать свои ресурсы от NIB, когда он освобождается.
Если вам действительно нужен оконный контроллер для основного окна, вы не можете поместить его в MainMenu.xib
.
Надеюсь, это поможет. Наверное, о контроллерах окон можно сказать гораздо больше