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.

importanza e buon contesto

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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow