Il existe deux méthodes intégrées d'observation dans Cocoa : l'observation clé-valeur et les notifications. Dans ces deux systèmes, vous n'avez pas besoin de maintenir ou de notifier vous-même une collection d'observateurs ; le framework s'en charge pour vous.
La fonction Key-Value Observing (KVO) vous permet d'observer une propriété d'un objet - y compris même une propriété représentant une collection - et d'être informé des modifications apportées à cette propriété. Il vous suffit d'envoyer l'objet -addObserver:forKeyPath:options:context:
en passant l'objet dont vous voulez recevoir les mises à jour, le chemin clé de la propriété (par rapport au récepteur) pour laquelle vous voulez recevoir les mises à jour, et les types de mises à jour que vous voulez recevoir. (Il existe des méthodes similaires que vous pouvez utiliser si vous voulez observer une propriété représentant une collection).
Les notifications sont plus anciennes et plus lourdes. Vous vous inscrivez auprès d'un NSNotificationCenter
- généralement le centre par défaut - une paire d'objet et de sélecteur à qui l'on transmet une notification lorsqu'un événement se produit. L'objet de notification lui-même peut contenir des données arbitraires via sa fonction userInfo
et vous pouvez choisir d'observer toutes les notifications d'un nom spécifique plutôt que celles qui s'appliquent à un objet particulier.
Lequel devez-vous utiliser dans un cas particulier ? En général, si vous vous intéressez aux modifications apportées à une propriété spécifique d'un objet spécifique, utilisez l'observation clé-valeur. C'est pour cela qu'elle a été conçue et elle est intentionnellement légère. () Si vous vous intéressez à un changement d'état qui n'est pas représenté par une propriété, les notifications sont plus appropriées.
Par exemple, pour rester synchronisé lorsque l'utilisateur change le nom d'un objet du modèle, j'utiliserais KVO. Pour savoir quand un graphique d'objets entier a été sauvegardé, j'utiliserais les notifications.