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.

znaczenie i dobry kontekst

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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow