В приложении без документов по одному на окно. Я говорю только о контроллерах, которые вы пишете сами, а не о контроллерах окон, контроллерах представления, контроллерах объектов, контроллерах массивов, контроллерах дерева или контроллерах словарей. (Обратите внимание, что некоторые люди делают свой пользовательский контроллер NSWindowController.) Я также не считаю делегата приложения, которому принадлежат ваши корневые контроллеры.
В приложении с одним окном это обычно означает один пользовательский контроллер.
В приложении на основе документов вы вообще не пишете контроллеры вообще, а вместо этого пишете один или несколько подклассов NSDocument - по одному для каждого типа документа. Каждый объект документа обычно принадлежит только одному окну.
Независимо от того, какое приложение вы пишете, вы также можете создавать контроллеры для любых имеющихся у вас плавающих служебных панелей (например, Inspector), хотя вам следует рассмотреть альтернативный вариант: сделать панель собственным контроллером. , как NSFontPanel и NSColorPanel.