Во-первых, заполнитель здесь лучше, чем прокси.
Обычно, когда у вас есть объект в файле NIB / XIB, это означает, что загрузка файла NIB создаст этот экземпляр. Заполнители - это объекты, которые уже будут существовать при загрузке файла NIB, и они появляются внутри NIB, так что вы можете создавать соединения между объектами, которые будут созданы путем загрузки NIB, и объектами, которые уже существуют.
Владелец файла, первый респондент и приложение являются заполнителями.
Владелец файла является заполнителем для объекта, который будет загружать перо. Все методы загрузки NIB принимают параметр 'owner'. Когда вы устанавливаете соединение с владельцем файла, когда он устанавливается во время выполнения, он будет связан с объектом владельца, переданным в метод загрузки пера. Многие классы UIKit и AppKit вызывают для вас методы загрузки пера. NSApplication
, NSViewController
, NSWindowController
, UIApplication
и UIViewController
- все загружают файлы NIB от вашего имени. Когда они делают это, они передают себя как параметр владельца методам загрузки пера. Вот почему, когда вы используете контроллер представления или контроллер окна, вы устанавливаете владельца файла на свой подкласс и делаете большую часть соединений между вашими представлениями и владельцем файла.
Экземпляр NSApplication
является простым заполнителем для [NSApplication sharedApplication]
. Это глобальный синглтон, и значок в Интерфейсном Разработчике представляет этот глобальный синглтон. Загрузка файла NIB не создает второй экземпляр NSApplication
. Напротив, если файл NIB содержит окно, если вы загружаете его дюжину раз, у вас будет дюжина экземпляров окна, но все равно один экземпляр NSApplication
.
Первый респондент уникален. Подключение действия к первому респонденту означает, что при запуске действия оно должно динамически отправляться в цепочку респондента. Цепочка респондента обычно начинается с сфокусированного представления и продолжается вверх по иерархии представления и включает в себя некоторые контроллеры и делегаты. Каждый объект в цепочке получает укол при обработке действия. Пункты меню прекрасно работают с цепочкой респондента. Если бы у вас был пункт меню «Сделать жирным», который должен сделать выделенный в настоящий момент текст жирным, вы могли бы начать с подключения к подклассу NSApplication
, но тогда вам нужно было бы знать все ситуации, которые » Make Bold »относится и к тому, как с ними обращаться. Текстовое представление и редактируемое веб-представление, вероятно, нуждаются в различном коде для обработки «сделать жирным шрифтом», и объединение всего этого в один объект может быть довольно сложным и не будет очень расширяемым. Вместо этого вы можете подключить действие пункта «Сделать жирным» к действию makeBold:
на Первом респонденте. Это будет означать, что при выборе пункта меню сфокусированный объект или один из его родителей, который ответил на makeBold:
, получит сообщение makeBold:
. Теперь многие классы могут реализовать метод makeBold:
и отвечать на этот пункт меню, когда они в фокусе.