Правильная общая картина, неправильные детали реализации в первом абзаце.
«Первым ответчиком» в NibFile является объект…
Нет, вообще-то, первый ответчик - nil
. Подключение элемента управления пользовательского интерфейса (например, кнопки) к First Responder в наконечнике эквивалентно [control setTarget:nil]
в коде.
Причиной поддельного объекта First Responder в окне пера является то, что в IB вы устанавливаете цель и действие одновременно (удерживая клавишу CTRL при перетаскивании на цель, выберите действие из всплывающего меню). Вы не можете установить действие и оставить цель неустановленной, как в коде, поэтому, чтобы установить ее на nil
, вам нужно сделать это явно. Для этого предназначен первый ответчик: это поддельный объект, представляющий nil
, поэтому вы можете установить цель и действие так же, как и при установке конкретной конкретной цели.
Конечно, вы не можете использовать это для установки чего-либо еще на nil
, только для просмотра целей. Вы можете использовать его только для обозначения «Первый ответчик», а не для чего-либо еще.
Так что, если пользователь нажимает на элемент управления пользовательского интерфейса, Nib устанавливает ...
Перо ничего не делает. Это просто высушенная коллекция объектов, хранящихся на диске. Даже когда вы создаете экземпляр NSNib, все, что вы делаете, это размораживаете некоторые объекты. Это объекты, которые делают вещи.
В данном случае, когда вы разархивируете элемент управления, подключенный к первому ответчику, из пера, его цель устанавливается на nil
(помните, что именно таким на самом деле является первый респондент: цель nil
). Когда целью элемента управления является nil
, и пользователь нажимает на него, он отправляет свое действие тому респонденту, который первым ответит в данный момент.
Ваш второй и третий абзацы верны.