Ich versuche mich selbst objektiv-c mit dem großen Nerd Ranch-Buch zu lehren, es ist ein wirklich tolles Buch, aber bestimmte Aspekte verwirren mich.Objective-C setValue: forKey auf c primitive Typen
Das aktuelle Kapitel spricht über die Verwendung von setValue: forKey-Funktion, die ich verstehe, ist eine Methode in NSObject definiert. Das Buch sagt, dass man diese auf ac primitiven wie int oder float verwenden kann, und gibt dieses Beispiel
Ich habe eine benutzerdefinierte Klasse Appliance und es ist ein Integer-Instanz-Variable genannt Spannung genannt, die die Spannung der Speicher Strom Gerät ich initialisieren ein neues Gerät namens ein
appliance *a = [[appliance alloc]init];
[a setValue:[NSNumber numberWithInt:240] forKey:@"voltage"];
er richtet dann eine benutzerdefinierte Setter für Spannung und protokolliert die Spannung, wenn sein zu beweisen, nannte es funktioniert
-(void)setVoltage:int(x) {
NSLog(@"setting voltage to %d",x);
voltage =x;
}
Was verwirrend ist, dass NSNumber numberWithInt einen Zeiger auf ein NSNumber-Objekt zurückgibt, das auf dem Heap korrekt gespeichert ist? Wie also protokolliert er die in NSNumber gespeicherte Ganzzahl mit dem Token% d? Ich verstehe, dass würde eine ganze Zahl protokollieren, aber ist kein Objekt übergeben? Außerdem dachte ich, dass, da die Spannung als Integer und nicht als Zeiger auf etwas definiert war, sie die Adresse nicht auf einem Objekt in ihrem Speicher halten konnte? Oder zwingt NSNumber es, seine Speicheradresse zu halten, ohne dass tatsächlich Spannung als Zeiger deklariert wird?
Entschuldigung für die Verwirrung dieses Kapitels trat im Grunde meinen Hintern.
Beachten Sie, dass Sie in normalen Programmierpraktiken normalerweise 'setValue: forKey:' oder 'valueForKey:' verwenden, um Werte für ein Objekt * festzulegen/abzurufen. Rufen Sie einfach den Setter/Getter direkt an. KVC existiert größtenteils, um Dinge wie Bindungen und andere Formen der Meta-Programmierung zu unterstützen. – bbum