响应链具有如下特性: 由App Kit自动创建的; 一个App可以包含任意数量的响应链,但同一时刻仅能有一条响应链处理消息; 可以在响应链中插入响应者:(通过NSResponder的 setNextResponder 非文档App,有NSWindowController 0x02 响应者 响应者是一个能够接收消息的对象,并且可以响应行为,响应者通常都继承自NSResponder;例如App Kit中的NSApplication
图片来自网络 在AppKit中的事件都处于一个响应的链条中,这个链条是由一个叫做NSResponder 的类定义的,这个响应链条其实是一个列表,它里面装满了能够响应用户事件的对象.当用户点击鼠标,或者按下键盘的某个键 一个对象如果可以处理事件,那么这个对象必须继承自NSResponder这个类.在AppKit中,NSApplication,NSWindow,NSView都继承自NSResponder 一个NSResponder NSWindow窗口对象将事件以NSResponder Message消息的形式(比如mouseDown:或者keyDown:)派发到与用户操作关联的NSView对象. NSWindow对象是将事件以一个与鼠标相关的NSResponder明确消息方式发送视图(NSView),比如mouseDown:,mouseDragged:,或者rightMouseUp:,如果是鼠标按下事件 鼠标点击事件可以根据点击方向(按下或抬起)和鼠标按钮(左键,右键,或其他)被进一步的细化分类,这些定义在了NSEventType 和 NSResponder 中.
感兴趣的方法是 mouseUp:由 NSView 的父类 NSResponder 实现的选择器。 在 LLDB 中,在 NSResponder 的 mouseUp:选择器上创建一个断点,然后继续执行。 如果您不记得该怎么做,则需要以下命令: (lldb) b -[NSResponder mouseUp:] (lldb) continue 现在,点击应用程序窗口。 确保单击 NSScrollView 的外部,因为 NSScrollView 它会拦截您的单击,并且不会命中 -[NSResponder mouseUp:] 断点。 注:尽管 NSResponder 实现了 mouseDown: 方法,但 NSWindow 重写了它。
前言: 1、在Mac OS中NSWindow的父类是NSResponder,而在iOS中UIWindow的父类是UIView。程序一般只有一个窗口但是会又很多视图。
httpd、tux、snmpd、named、postgresql、MySQLd、webmin、kudzu、squid、cups、ip6tables、iptables、pcmcia、bluetooth、NSResponder
下面的例子中,objtree导出了超过3000个触发keyDown事件的选择器: sudo objtree Messages -m "-[NSResponder keyDown:]" 其次,在找到最重要的