objectForKey
との違いは何ですかvalueForKey
? ドキュメントで両方を調べましたが、私には同じに思えました。
ベストアンサー1
objectForKey:
はメソッドですNSDictionary
。NSDictionary
は に似たコレクション クラスですNSArray
が、インデックスを使用する代わりにキーを使用して項目を区別します。キーは、指定する任意の文字列です。2 つのオブジェクトが同じキーを持つことはできません ( 内の 2 つのオブジェクトがNSArray
同じインデックスを持つことができないのと同じです)。
valueForKey:
は KVC メソッドです。任意のクラスで動作します。valueForKey:
名前に文字列を使用してプロパティにアクセスできます。たとえば、Account
プロパティを持つクラスがある場合accountNumber
、次の操作を実行できます。
NSNumber *anAccountNumber = [NSNumber numberWithInt:12345];
Account *newAccount = [[Account alloc] init];
[newAccount setAccountNumber:anAccountNUmber];
NSNumber *anotherAccountNumber = [newAccount accountNumber];
KVC を使用すると、プロパティに動的にアクセスできます。
NSNumber *anAccountNumber = [NSNumber numberWithInt:12345];
Account *newAccount = [[Account alloc] init];
[newAccount setValue:anAccountNumber forKey:@"accountNumber"];
NSNumber *anotherAccountNumber = [newAccount valueForKey:@"accountNumber"];
これらは同等のステートメントのセットです。
皮肉なことに、すごい、とお思いでしょう。KVC はそれほど便利そうには見えません。実際、KVC は「冗長」に見えます。しかし、実行時に変更したい場合、他の言語でははるかに難しい多くの優れた機能を実行できます (ただし、これは質問の範囲を超えています)。
KVCについてもっと知りたい場合は、Googleで検索すると多くのチュートリアルがあります。スコット・スティーブンソンのブログ. また、NSKeyValueCoding プロトコルリファレンス。