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