iOS
Obserwacja wartości klucza kodowania wartości klucza
Szukaj…
Uwagi
KVC : - Kodowanie klucz-wartość
Zwykle zmienne instancji są dostępne za pośrednictwem właściwości lub akcesoriów, ale KVC daje inny sposób dostępu do zmiennych w postaci ciągów. W ten sposób twoja klasa działa jak słownik, a nazwa twojej własności, na przykład „wiek” staje się kluczem, a wartość, którą posiada właściwość, staje się wartością dla tego klucza.
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 : - Obserwator kluczowych wartości
Mechanizm, za pomocą którego obiekty są powiadamiane o zmianie dowolnej właściwości, nazywa się KVO. Np .: powiadomienie klawiatury
Na przykład obiekt osoby jest zainteresowany otrzymywaniem powiadomienia o zmianie właściwości accountBalance w obiekcie BankAccount. Aby to osiągnąć, Osoba Obiekt musi zarejestrować się jako obserwator właściwości accountBalance BankAccount, wysyłając addObserver: forKeyPath: opcje: kontekst: komunikat.
Wykorzystanie kontekstu do obserwacji KVO
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
Kontekst jest ważny, jeśli wysyłasz swoją klasę do użycia przez innych. Kontekst pozwala twojemu obserwatorowi klasy sprawdzić, czy to ty jesteś obserwatorem, który jest wywoływany.
Problem z nieprzekazaniem obserwatora polega na tym, że jeśli ktoś podklasuje twoją klasę i zarejestruje obserwatora dla tego samego obiektu, tego samego klucza i nie przekazuje kontekstu, wówczas obserwator superklasy można nazwać wielokrotnym.
Zmienna, która jest unikalna i wewnętrzna do użytku, jest dobrym kontekstem.
Po więcej informacji.
Obserwacja właściwości podklasy NSObject
Większość funkcji KVO i KVC jest już domyślnie zaimplementowana we wszystkich podklasach NSObject
.
Aby rozpocząć obserwowanie właściwości o nazwie firstName
obiektu o nazwie personObject
zrób to w klasie obserwacyjnej:
[personObject addObserver:self
forKeyPath:@"firstName"
options:NSKeyValueObservingOptionNew
context:nil];
Obiekt, do którego odnosi się self
w powyższym kodzie, otrzyma komunikat observeValueForKeyPath:ofObject:change:context:
za każdym razem, gdy zmieni się obserwowana ścieżka klucza.
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSString *,id> *)change
context:(void *)context
{
NSLog(@"new value of %@ is: %@", keyPath, change[NSKeyValueChangeNewKey]);
}
„Ścieżka klucza” to termin KVC. NSObject
domyślnie implementują funkcjonalność KVC.
Zmienna instancji o nazwie _firstName
będzie dostępna przy ścieżce klucza @"firstName"
.
Sposób getter nazwie firstName
zostanie wywołana podczas dostępu do @"firstName"
ścieżkę klucza, niezależnie od tego, nie będąc _firstName
instancja zmiennej lub setFirstName
setter.