Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSNotification和NSEvent之间的区别_Objective C_Cocoa_Nsnotification_Nsevent - Fatal编程技术网

Objective c NSNotification和NSEvent之间的区别

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用于通知观察者状态或对象的更改(例如,当网络可达性更改、新数据可用或窗口移动时) 在您的例子

我真的不理解cocoa在通知和事件之间的区别

例如,我可以编写如下代码:

-(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的目的。