Zoeken…


Opmerkingen

KVC : - Key-Value codering

Normaal worden instantievariabelen benaderd via eigenschappen of accessors, maar KVC biedt een andere manier om toegang te krijgen tot variabelen in de vorm van strings. Op deze manier gedraagt uw klas zich als een woordenboek en wordt uw eigenschapsnaam, bijvoorbeeld 'leeftijd', sleutel en wordt de waarde die eigendom heeft, waarde voor die sleutel.

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-waarnemer

Het mechanisme waarmee objecten op de hoogte worden gebracht wanneer er een wijziging is in een eigenschap wordt KVO genoemd. Bijv .: toetsenbordmelding

Persoonobject is bijvoorbeeld geïnteresseerd in een melding wanneer de eigenschap accountBalance wordt gewijzigd in het BankAccount-object. Om dit te bereiken, moet Person Object zich als waarnemer van de eigenschap AccountBalance van de BankAccount registreren door een addObserver: forKeyPath: options: context: message te verzenden.

Gebruik van context voor KVO-observatie

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

Context is belangrijk als u uw klas verzendt zodat anderen deze kunnen gebruiken. Context laat uw klaswaarnemer verifiëren dat u de waarnemer bent die wordt genoemd.

Het probleem met het niet passeren van een waarnemer is dat, als iemand je klas subklasseert en een waarnemer registreert voor hetzelfde object, dezelfde sleutel en hij geen context passeert, de superklasse-waarnemer meerdere keren kan worden genoemd.

Een variabele die uniek en intern is voor uw gebruik is een goede context.

Voor meer informatie.

belang en goede context

Een eigenschap van een NSObject-subklasse observeren

De meeste KVO- en KVC-functionaliteit is al standaard geïmplementeerd op alle NSObject subklassen.

Ga als volgt te werk om een eigenschap met de naam firstName van een object met de naam personObject gaan observeren:

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

Het object waarnaar self in de bovenstaande code verwijst, ontvangt vervolgens een observeValueForKeyPath:ofObject:change:context: bericht wanneer het waargenomen sleutelpad verandert.

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

"Sleutelpad" is een KVC-term. NSObject subklassen implementeren standaard KVC-functionaliteit.

Een instantievariabele met de naam _firstName is toegankelijk via het sleutelpad @"firstName" .

Een getter-methode met de naam firstName wordt aangeroepen bij toegang tot het sleutelpad @"firstName" , ongeacht of er een _firstName instantievariabele of setFirstName setter-methode is.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow