Objective c NSNotification和NSEvent之间的区别
我真的不理解cocoa在通知和事件之间的区别 例如,我可以编写如下代码:Objective c NSNotification和NSEvent之间的区别,objective-c,cocoa,nsnotification,nsevent,Objective C,Cocoa,Nsnotification,Nsevent,我真的不理解cocoa在通知和事件之间的区别 例如,我可以编写如下代码: -(void)mouseMoved:(NSEvent*)event { … } 但不是 -(void)windowMoved:(NSEvent*)event { … } 对于第二个,我必须使用NSNotification–为什么?区别在于,NSEvent用于封装输入事件。鼠标按下、按键按下等。 但是,NSNotification用于通知观察者状态或对象的更改(例如,当网络可达性更改、新数据可用或窗口移动时) 在您的例子
-(void)mouseMoved:(NSEvent*)event { … }
但不是
-(void)windowMoved:(NSEvent*)event { … }
对于第二个,我必须使用
NSNotification
–为什么?区别在于,NSEvent用于封装输入事件。鼠标按下、按键按下等。
但是,NSNotification用于通知观察者状态或对象的更改(例如,当网络可达性更改、新数据可用或窗口移动时)
在您的例子中:窗口移动不是某种输入,而是窗口位置的改变。因此,您得到的是NSNotification而不是NSEvent。区别在于,NSEvent用于封装输入事件。鼠标按下、按键按下等。 但是,NSNotification用于通知观察者状态或对象的更改(例如,当网络可达性更改、新数据可用或窗口移动时)
在您的例子中:窗口移动不是某种输入,而是窗口位置的改变。因此,您会得到一个NSNotification而不是一个NSEvent。但为什么在输入事件和状态更改之间进行区分会更好呢?这难道不会让生活变得不必要的复杂吗?@Polybos:因为它们背后有两个不同的概念。NSNotification将发布给对此状态更改感兴趣的任何人,但NSEvent仅发送给当前最顶端的接收器(具有焦点的对象)。NSEvent并不意味着要通过整个应用程序进行广播,但这正是NSNotification的目的。但为什么要在输入事件和状态更改之间进行区分呢?这难道不会让生活变得不必要的复杂吗?@Polybos:因为它们背后有两个不同的概念。NSNotification将发布给对此状态更改感兴趣的任何人,但NSEvent仅发送给当前最顶端的接收器(具有焦点的对象)。NSEvent并不意味着要通过整个应用程序进行广播,但这正是NSNotification的目的。