KVO ist von Natur aus einzelnen Gewinden, daß die KVO-Benachrichtigungen auf demselben Thread als Änderung bricht.
Natürlich UIKit und Cocoa beide wirklich nur wollen Sie UI-Elemente auf dem Hauptthread sein diddling.
Wenn Sie also asynchrone Operationen ausführen, verwenden Sie höchstwahrscheinlich Threads, und wenn ja, haben Sie bereits ein Synchronisationsproblem, bei dem Sie die Benachrichtigungen von einem Thread zum Hauptthread abrufen müssen.
Und darin liegt der Schlüssel. Anstatt jede Änderungsbenachrichtigung blind zu übermitteln, können Sie die Änderungsbenachrichtigungen zusammenführen, bevor Sie sie an den Hauptthread weiterleiten.
Es gibt eine Vielzahl von Mitteln, über die Sie dies tun können. Die spezifische Lösung wird sehr wahrscheinlich für Ihre Anwendung ziemlich einzigartig sein.
Persönlich versuche ich coalesce-and-forward feinkörniger Operationen zu vermeiden. Ich finde es viel einfacher, dem Hauptthread zu sagen, dass sich ein bestimmter Untergraph von Objekten geändert hat. Es ist wahrscheinlicher, dass der Zeichnungscode, der dann die Änderungen für den Benutzer sichtbar macht, den zugehörigen Zustand neu zeichnen muss und somit die damit verbundenen Änderungen automatisch widergespiegelt werden.
Der Schlüssel, wie Sie vermuten, besteht darin, die Benachrichtigungen zu drosseln, damit Sie die Reaktionszeit der App nicht beeinträchtigen (oder die Akkulaufzeit des Geräts zerstören).
Dank Adam. Ja, NSNotification sieht für meinen Bedarf besser aus als KVO. Prost. – dugla
Es ist jetzt sehr einfach, KVO asynchron mit GCD (Grand Central Dispatch) zu verwenden. NSNotification bietet viel weniger Flexibilität als KVO und ist in vielen Fällen kein effektiver Ersatz. – mjmdavis