KVO est intrinsèquement un thread unique en ce que les notifications KVO seront livrées sur le même thread que la modification.
Bien sûr, UIKit et Cocoa ne veulent tous les deux que vous faire glisser des éléments d'interface utilisateur sur le thread principal. Par conséquent, si vous effectuez des opérations asynchrones, vous utilisez très probablement des threads et, si tel est le cas, vous avez déjà un problème de synchronisation en ce sens que vous devez récupérer les notifs d'un thread dans le thread principal.
Et c'est là que réside la clé. Au lieu de transmettre aveuglément chaque notification de modification au fur et à mesure, vous pouvez fusionner les notifications de modification avant de les transmettre au thread principal.
Il y a une variété de moyens par lesquels vous pouvez faire ceci. La solution spécifique va être tout à fait unique à votre application, très probablement. Personnellement, j'essaie d'éviter la coalescence et la progression des opérations à grain fin. Je trouve beaucoup plus simple de dire au fil conducteur qu'un sous-graphe particulier d'objets a changé. Plus probablement qu'autrement, le code de dessin qui rendra les changements visibles à l'utilisateur aura besoin de redessiner l'état connexe et, par conséquent, les changements liés seront automatiquement reflétés. La clé, comme vous l'avez supposé, est d'étrangler les notifications pour ne pas ralentir la réactivité de l'application (ou détruire la durée de vie de la batterie des périphériques).
Merci Adam. Oui, NSNotification a l'air mieux adapté que KVO pour mes besoins. À votre santé. – dugla
Il est maintenant assez facile d'utiliser KVO de manière asynchrone avec GCD (Grand Central Dispatch). NSNotification offre beaucoup moins de flexibilité que KVO et pourrait ne pas être un remplacement efficace dans de nombreux cas. – mjmdavis