2009-07-22 7 views
2

レシーバクラスはNSKeyValueProtocolに準拠している場合、長い道を行くためのオプションがあります:オブジェクトのプロパティにアクセスするときに、単純なドット構文ではなくKVCを使用するのはなぜですか?

[myInstance setValue:[NSNumber numberWithInt:2] forKey:@"integerProperty"]; 

または短い方法:

myInstance.integerProperty = 2; 

このKVC方法のポイントは何ですか?これはいつ便利ですか?それらが同じでない

答えて

3

まず、第二にすべきである:

myInstance.integerProperty = [NSNumber numbwerWithInt:2]; 

integerPropertyNSNumberある場合。

一般的には、ほとんどの作業を行うときに2番目のフォームを使用します。たとえば、NSArrayに対してvalueForKeyPath:がどのように機能するかを考えてみましょう(参考のために、NSArrayに対して-valueForKey:を呼び出すと、各オブジェクトがどこにあるかの配列を返します)。それが渡されているので

- (NSArray *) valueForKey:(id)key { 
    NSMutableArray *retval = [NSMutableArray array]; 

    for (NSObject *object in self) { 
    [retval addObject:[object valueForKey:key]]; 
    } 

    return retval; 
} 

我々は鍵が事前にあるかわからないにもかかわらず、私たちの機能を実装するためにvalueForKey:を使用することができました上記の場合:その値のためにそのNSArrayで対応するオブジェクトを求めた結果引数として入力してください

+0

"まず、彼は同じ、2番目のは: " - 必ずしもそうでなければならない。プロパティをNSIntegerまたは同様のものとして宣言している場合は、ドット構文に "2"を使用しますが、それでもNSNumberにKVCを入れる必要があります。 –

関連する問題