2


1

客観的なCキーパス演算子@ avg、@ max
arr = [[NSMutableArray alloc]init];
[arr addObject:[NSNumber numberWithInt:4]];
[arr addObject:[NSNumber numberWithInt:45]];
[arr addObject:[NSNumber numberWithInt:23]];
[arr addObject:[NSNumber numberWithInt:12]];
NSLog(@"The avg = %@", [arr valueForKeyPath:@"@avg.intValue"]);

このコードは問題なく動作しますが、なぜですか? `valueForKeyPath:@" @ avg.intValue "`は各NSNumberに(int)を要求していますが、ログに%@文字列を出力しています。 10進数の%dを出力しようとすると、おそらく何かへのポインターである数値が得られます。 @avg演算子を呼び出すときに整数がNSNumbersになる理由を誰かが説明できますか?

2 Answer


1


@ avg`演算子は NSNumber`インスタンスを返します。 %d`を使用する場合、 NSNumber`インスタンスのメモリアドレスを出力します。 一方、「%@」を使用すると、「NSNumber」インスタンスに「description」メッセージが送信され、結果の「NSString」が出力されます。

Set and Array Operatorsを参照してください。 `@ avg`およびその他の演算子の詳細については、documentation / cocoa / Conceptual / KeyValueCoding / KeyValueCoding.html [Key-Value Coding Programming Guide]を参照してください。


1


「valueForKeyPath:」はオブジェクトを返す必要があり(その戻り値の型は「id」です)、NSNumberまたはNSValueを取得します(どちらかはわかりません。「intValue」がintまたはNSNumberを提供するかどうか、および(if前者)結果がオブジェクトにバンドルされる方法)、「intValue」にもかかわらず。 コレクションに非オブジェクトを保存できないのと同じ理由です。