Sök…


Anmärkningar

KVC : - Nyckelvärdeskodning

Normalt kan inställningsvariabler nås via egenskaper eller accessorer men KVC ger ett annat sätt att komma åt variabler i form av strängar. På detta sätt fungerar din klass som en ordlista och ditt egendomsnamn till exempel "ålder" blir nyckel och värde som egenskapen innehar blir värde för den nyckeln.

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

Mekanismen genom vilken objekt meddelas när det sker någon förändring av någon egendom kallas KVO. Ex.:tangentmeddelande

Exempelvis är personobjekt intresserade av att få ett meddelande när egenskapen AccountBalance ändras i BankAccount-objektet. För att uppnå detta måste Personobjekt registrera sig som en observatör av BankAccount's accountBalance-egenskap genom att skicka ett addObserver: forKeyPath: alternativ: context: meddelande.

Användning av sammanhang för KVO Observation

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

Kontext är viktigt om du skickar din klass för andra att använda. Kontekst låter din klassobservatör verifiera att det är din observatör som kallas.

Problemet med att inte passera en observatör är, om någon underklassar din klass och registrerar en observatör för samma objekt, samma nyckel och han inte passerar ett sammanhang, kan superklassobservatören kallas flera gånger.

En variabel som är unik och intern för din användning är ett bra sammanhang.

För mer information.

vikt och bra sammanhang

Observera en egenskap i en underklass för NSObject

De flesta KVO- och KVC-funktioner är redan implementerade som standard på alla underklasser av NSObject .

För att börja observera en egenskap med namnet firstName på ett objekt som heter personObject gör detta i observationsklassen:

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

Objektet som self i koden ovan refererar till kommer då att få ett observeValueForKeyPath:ofObject:change:context: meddelande när den observerade nyckelvägen ändras.

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

"Nyckelväg" är en KVC-term. NSObject underklasser implementerar KVC-funktionalitet som standard.

En instansvariabel med namnet _firstName kommer att vara tillgänglig @"firstName" tangenten sökväg @"firstName" .

En getter-metod med namnet firstName kommer att kallas vid åtkomst till @"firstName" , oavsett om det finns en _firstName instansvariabel eller setFirstName setter-metod.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow