正确的总体情况,错误的第一段实现细节。
NibFile 中的“First Responder”是一个对象……</p>
不,实际上,First Responder 是nil
。在 nib 中将 UI 控件(例如,按钮)连接到 First Responder 相当于[control setTarget:nil]
在代码中。
在 nib 窗口中出现 First Responder fake-object 的原因是,在 IB 中,您同时设置了 target 和 action(ctrl-drag 到 target,从弹出菜单中选择 action)。您不能像在代码中那样设置操作并保持目标未设置,因此要将其设置为nil
,您需要明确地这样做。这就是 First Responder 的用途:它是一个代表 的假对象nil
,因此您可以设置目标和操作,就像将其设置为特定的真实目标时一样。
当然,您不能使用它来设置任何其他内容nil
,只能设置视图的目标。您只能用它来表示 First Responder,而不是其他任何东西。
因此,如果用户单击 UI 控件,则 Nib 会设置……</p>
笔尖什么都不做。它只是存储在磁盘上的冻干对象集合。即使你实例化 NSNib,你所做的只是解冻一些对象。做事的是对象。
在手头的情况下,当您从 nib 取消归档连接到 First Responder 的控件时,它的目标设置为nil
(请记住,这才是 First Responder 的真正含义: 的目标nil
)。当控件的目标是nil
并且用户单击它时,它会将其操作发送给当时是第一响应者的响应者。
你的第二和第三段是正确的。