响应链是一种消息处理机制,它是以组有序的响应者对象组成的链条。
当消息进入响应链条后,由响应者对象依次判断是否能够处理该消息,当一个响应者对象不能处理此条消息的时,它会将消息传递给它的继任者(也就是下一个响应对象)。响应链具有如下特性:
1.由AppKIt自动创建
2.一个App同一时刻可以包含任意数量的响应链,但同一时刻仅能有一条响应链处理消息。
3.可以在响应链中插入响应者:(通过NSResponder的setNextResponder:的方法)
4.不同的事件消息,在响应链中会有不同的响应逻辑;
响应消息的种类
响应链处理的消息大体上分为两种:Event Messages和Action Messages
Event Messages(事件消息:)
Event Messages主要是指的是由键盘/鼠标/触控板触发的NSEvent事件。几乎所有的Event Messages都由当前的窗口对象(NSWindow)的响应链进行处理;事件消息的处理起始于NSWindow的第一个对象
对于键盘事件,响应是从窗口的第一响应者开始;
对于鼠标/触控板事件,响应是从用户操作的view开始;
如果事件消息在最初没有响应,娜美响应链将按照视图的层级结构依次传递消息,直到窗口对象(NSwindow)为止,如果当前窗口对象是由NSWindowController管理的,那么这个NSWindowController将会成为最终的事件响应者;当整个响应链都没有完成对事件的处理时,响应链会调用最后的noREsponderFor:方法,可以根据具体需求来重写这个方法实现相应的功能;