Próbuję nauczyć się obiektywu c przy użyciu dużej książki o nerdach, jest to naprawdę świetna książka, ale niektóre aspekty mnie mylą.Objective-C setValue: forKey na c podstawowych typów
Obecny rozdział mówi o użyciu funkcji setValue: forKey, którą rozumiem jest metodą zdefiniowaną w NSObject. Książka mówi, że można to wykorzystać na ac prymitywnego jak int lub float i daje tym przykładzie
Mam niestandardowej klasy o nazwie Appliance aw nim jest całkowitą instancja zmiennej o nazwie Napięcie która przechowuje napięcie prąd urządzenie zainicjować nowe urządzenie o nazwie
appliance *a = [[appliance alloc]init];
[a setValue:[NSNumber numberWithInt:240] forKey:@"voltage"];
potem ustawia niestandardową setter dla napięcia i rejestruje napięcia przy jego nazwie, aby udowodnić, że działa
-(void)setVoltage:int(x) {
NSLog(@"setting voltage to %d",x);
voltage =x;
}
co jest mylące, że numer NSNumberWithInt zwraca wskaźnik do obiektu NSNumber zapisanego na stercie? więc w jaki sposób rejestruje liczbę całkowitą przechowywaną w NSNumber przy użyciu tokena% d. Rozumiem, że logowałbym liczbę całkowitą, ale czy obiekt nie jest przekazywany? ponadto pomyślałem, że skoro napięcie zostało zdefiniowane jako liczba całkowita, a nie wskaźnik do czegoś, to nie mogło pomieścić adresu obiektu w swojej pamięci? lub czy NSNumber zmusza go do przechowywania adresu pamięci bez zadeklarowania napięcia jako wskaźnika?
Przepraszam za zamieszanie, ten rozdział po prostu kopnął mnie w tyłek.
Należy zauważyć, że w normalnych praktykach kodowania, zazwyczaj nie używałbyś 'setValue: forKey:' lub 'valueForKey:' do ustawiania/otrzymywania wartości na obiekcie *. Po prostu wywołaj bezpośrednio setter/getter. KVC w dużej mierze istnieje, aby wspierać takie rzeczy jak wiązania i inne formy meta-programowania. – bbum