iOS
Key Value Coding: Key Value Observation
Ricerca…
Osservazioni
KVC : - Codifica valore-chiave
Normalmente le variabili di istanza sono accessibili tramite proprietà o accessor ma KVC offre un altro modo per accedere alle variabili in forma di stringhe. In questo modo la classe agisce come un dizionario e il nome della tua proprietà ad esempio "età" diventa la chiave e il valore che la proprietà detiene diventa valore per quella chiave.
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 : - Key-Value Observer
Il meccanismo attraverso il quale gli oggetti vengono notificati quando c'è un cambiamento in una qualsiasi delle proprietà è chiamato KVO. Ex.:keyboard notification
Ad esempio, l'oggetto persona è interessato ad ottenere una notifica quando la proprietà accountBalance viene modificata nell'oggetto BankAccount. Per raggiungere questo obiettivo, Person Object deve registrarsi come osservatore della proprietà del saldo del conto BankAccount inviando un addObserver: forKeyPath: options: context: message.
Uso del contesto per l'osservazione KVO
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
Il contesto è importante se spedisci la tua classe affinché altri possano usarla. Con il tuo programma di ricerca, l'osservatore di classe verifica che il tuo osservatore sia chiamato.
Il problema di non passare un osservatore è, se qualcuno sottoclasse la tua classe e registra un osservatore per lo stesso oggetto, stessa chiave e lui non passa un contesto, allora l'osservatore di super classe può essere chiamato più volte.
Una variabile che è unica e interna per il tuo uso è un buon contesto.
Per maggiori informazioni.
Osservazione di una proprietà di una sottoclasse NSObject
La maggior parte delle funzionalità KVO e KVC è già implementata per impostazione predefinita su tutte le sottoclassi NSObject
.
Per iniziare a osservare una proprietà denominata firstName
di un oggetto denominato personObject
fai questo nella classe observing:
[personObject addObserver:self
forKeyPath:@"firstName"
options:NSKeyValueObservingOptionNew
context:nil];
L'oggetto a cui self
riferisce il codice sopra riportato riceverà quindi un observeValueForKeyPath:ofObject:change:context:
message ogni volta che il percorso chiave osservato cambia.
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSString *,id> *)change
context:(void *)context
{
NSLog(@"new value of %@ is: %@", keyPath, change[NSKeyValueChangeNewKey]);
}
"Percorso chiave" è un termine KVC. NSObject
sottoclassi NSObject
implementano la funzionalità KVC per impostazione predefinita.
Una variabile di istanza denominata _firstName
sarà accessibile tramite il percorso chiave @"firstName"
.
Procedimento getter denominata firstName
verrà chiamato quando si accede al @"firstName"
percorso della chiave, indipendentemente dall'esistenza di un _firstName
variabile istanza o setFirstName
metodo setter.