Recherche…


Remarques

KVC : - Codage de la valeur clé

Normalement, les variables d'instance sont accessibles via des propriétés ou des accesseurs, mais KVC offre un autre moyen d'accéder aux variables sous forme de chaînes. De cette façon, votre classe agit comme un dictionnaire et le nom de votre propriété, par exemple «age», devient clé et la valeur que la propriété contient devient une valeur pour cette clé.

For example, you have employee class with "age" property. Normally we access like this.
emp.age = @”20″;
NSString age = emp.age; 

But KVC works like this: 
[emp valueForKey:@"age"]; 
[emp setValue:@"25" forKey:@"age"];

KVO : - Observateur de la valeur-clé

Le mécanisme par lequel les objets sont notifiés en cas de changement de propriété est appelé KVO. Ex.: Notification clavier

Par exemple, l'objet personne souhaite obtenir une notification lorsque la propriété accountBalance est modifiée dans l'objet BankAccount. Pour ce faire, Object Person doit s'enregistrer en tant qu'observateur de la propriété accountBalance de BankAccount en envoyant un addObserver: forKeyPath: options: context: message.

Utilisation du contexte pour l'observation KVO

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context

Le contexte est important si vous expédiez votre classe pour que d'autres puissent l'utiliser. Le contexte permet à votre observateur de classe de vérifier que vous êtes son observateur appelé.

Le problème de ne pas dépasser un observateur est que si quelqu'un sous-classe votre classe et enregistre un observateur pour le même objet, la même clé et qu'il ne passe pas de contexte, alors l'observateur de super-classe peut être appelé plusieurs fois.

Une variable unique et interne pour votre utilisation est un bon contexte.

Pour plus d'informations.

importance et bon contexte

Observation d'une propriété d'une sous-classe NSObject

La plupart des fonctionnalités KVO et KVC sont déjà implémentées par défaut sur toutes les sous-classes NSObject .

Pour commencer à observer une propriété nommée firstName d'un objet nommé personObject faites-le dans la classe d'observation:

[personObject addObserver:self
               forKeyPath:@"firstName"
                  options:NSKeyValueObservingOptionNew
                  context:nil];

L'objet que l' self dans le code ci - dessus fait référence à recevra alors un observeValueForKeyPath:ofObject:change:context: un message chaque fois que les changements de chemin clés observées.

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary<NSString *,id> *)change
                       context:(void *)context
{
    NSLog(@"new value of %@ is: %@", keyPath, change[NSKeyValueChangeNewKey]);
}

"Key path" est un terme KVC. NSObject sous-classes NSObject implémentent la fonctionnalité KVC par défaut.

Une variable d'instance nommée _firstName sera accessible par le chemin d'accès de la clé @"firstName" .

Une méthode de lecture du nom firstName sera appelé lors de l' accès au @"firstName" chemin de clé, quelle que soit l'existence d' une _firstName variable d'instance ou setFirstName méthode setter.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow