私は大きなナンデの牧場の本を使って客観的なことを教えようとしていますが、それは本当に素晴らしい本ですが、特定の面が私を混乱させます。Objective-C setValue:cプリミティブ型のforKey
現在の章では、setValueの使用について説明しています。forKey関数は、NSObjectで定義されているメソッドです。この本は、私がアプライアンスとそれに呼ばれるカスタムクラスは、の電圧を保持電圧呼ば整数インスタンス変数である必要がありますが、intやfloat型などのプリミティブ交流にこれを使用することができますことを言うと、この例に
を与えます現在のアプライアンス 私は
appliance *a = [[appliance alloc]init];
[a setValue:[NSNumber numberWithInt:240] forKey:@"voltage"];
と呼ばれる新しいアプライアンスを初期化し、彼はその後、電圧のカスタムセッターを設定し、そのそれが
-(void)setVoltage:int(x) {
NSLog(@"setting voltage to %d",x);
voltage =x;
}
を動作するか検証するために呼び出されたときの電圧を記録します NSNumberのnumberWithIntは、ヒープに格納されているNSNumberオブジェクトへのポインタを返します。それでは、%dトークンを使ってNSNumberに格納されている整数をどのように記録するのですか?私はそれが整数を記録するが、渡されるオブジェクトではないことを理解していますか?さらに、電圧は整数であり、何かへのポインタではないので、メモリ内のオブジェクトにアドレスを保持できないと考えました。または実際に電圧がポインタとして宣言されることなくメモリアドレスを保持するように強制するNSNumberの種類ですか?
この章は基本的に私のお尻を蹴って混乱して申し訳ありません。
通常のコーディング方法では、* setValue:forKey: 'や' valueForKey: 'を使ってオブジェクト*の値を設定/取得しないことに注意してください。 setter/getterを直接呼び出してください。 KVCは、バインディングや他の形式のメタプログラミングなどのものをサポートするために主に存在します。 – bbum