2010-12-23 6 views
1

Ich verstehe nicht wirklich den Unterschied, den Kakao zwischen einer Benachrichtigung und einem Ereignis macht.Unterschied zwischen NSNotification und NSEvent

Zum Beispiel könnte ich Code wie dieses:

-(void)mouseMoved:(NSEvent*)event { … } 

aber nicht

-(void)windowMoved:(NSEvent*)event { … } 

Für die zweite würde ich NSNotification verwenden müssen - warum?

Antwort

6

Der Unterschied ist, dass NSEvent zum Einkapseln von Eingabeereignissen verwendet wird. Maustaste gedrückt, Taste gedrückt usw. NSNotification wird jedoch verwendet, um Beobachter über eine Änderung eines Status oder eines Objekts zu benachrichtigen (z. B. wenn sich die Netzwerkerreichbarkeit geändert hat, neue Daten verfügbar wurden oder ein Fenster verschoben wurde).

In Ihrem Fall: Eine Fensterbewegung ist keine Eingabe, sondern eine Änderung der Fensterposition. Somit erhalten Sie eine NSNotification statt eines NSEvent.

+0

Aber warum sollte es gut sein, zwischen Eingangsereignis und Zustandsänderung zu unterscheiden? Macht das das Leben nicht unnötig kompliziert? –

+0

@Polybos: Weil es zwei verschiedene Konzepte gibt. Eine NSNotification wird für jeden veröffentlicht, der an dieser Statusänderung interessiert ist, aber ein NSEvent wird nur an den aktuellen obersten Empfänger (das Objekt mit dem Fokus) gesendet. Ein NSEvent soll nicht über die gesamte Anwendung übertragen werden, sondern genau das, wofür eine NSNotification erstellt wurde. – JustSid