2

Gibt es eine Möglichkeit, bei Verwendung von Koaleszenz-Benachrichtigungen auf NSNotificationQueues den Zeitbereich zu steuern?Verschmelzen NSNotifications

Ich möchte z. für die nächste Sekunde, aber wie ich die verfügbaren Optionen verstehe, ist es entweder sofort oder beim nächsten Durchlauf Schleife Aufruf oder 'wenn im Leerlauf' ..

Jeder andere Weg zu z.B. Koaleszieren über einen längeren Zeitraum?

Ich bin im Grunde auf der Suche nach einer Möglichkeit, alle Benutzerereignisse (wie Pinch-to-Zoom) über einen kleinen Zeitraum sammeln und starten eine teure Operation erst, nachdem der Benutzer scheinbar Zoomen gestoppt/etc.

Antwort

0

Sie können eine NSTimer einplanen, wenn die erste Benachrichtigung eingeht. Wenn die nächste Benachrichtigung eintrifft, überprüfen Sie Ihre Timer-Instanzvariable. Wenn es nicht null ist, ignoriere die Benachrichtigung. Ansonsten starte einen neuen Timer.

Wenn der Timer ausgelöst wird, löschen Sie die Timer-Instanzvariable und starten Sie die teure Operation. Eine einfachere Alternative ist die Verwendung von performSelector:afterDelay: und cancelPreviousPerformRequestsWithTarget:selector:object:. Der Effekt ist jedoch nicht der gleiche. Sie werden Ihren teuren Vorgang jedes Mal, wenn eine Benachrichtigung eingegangen ist, weiter verzögern. Wenn Benachrichtigungen schneller als die von Ihnen festgelegte Verzögerung kommen, wird die teure Operation niemals ausgeführt.

+0

Richtig, Sie beschreiben eine 100% ige benutzerdefinierte Implementierung. Sicher, das ist ein Weg, es zu tun - aber nicht im Zusammenhang mit der Verwendung der integrierten Koaleszenz-Benachrichtigungen Mechanismus. – ATV

+0

Ja. Ich glaube nicht, dass das integrierte Koaleszieren etwas anderes bietet als "Ende des Runloops" oder "wenn es leer ist". Dies ist für die meisten Fälle gut genug. Wenn Sie möchten, dass Ihre teure Operation nicht mehr als einmal pro Sekunde ausgelöst wird, müssen Sie das wahrscheinlich mithilfe eines Timers implementieren. –