この質問はすでに回答されていますが、将来の一般的な読者のために、より長い回答を具体化すると思いました。
何が起こっていますか?渡されたパラメーターの 1 つが整数 ( ) ivar 値であることを示すために使用さ
%d
れるC 形式の文字列です。int
値にはlike%f
が使用されfloat
ます。
[NSNumber numberWithInteger:index]
NSNumber インスタンスへのポインターを返します。を使用する%d
と、実際にはポインターを渡しているときに、NSLog は整数を渡していると見なします。そのため、ポインタ値 (メモリ アドレス) が出力されます。
なに%@
?
trojanfoe: で述べたように%@
、NSLog()
オブジェクトを渡していることを示します。その場合、NSLog は、文字列を使用してそれ自体を説明するようにオブジェクトに要求し、description
メソッドを呼び出します。
具体的な回答
この具体的な質問には、複数の方法があります。主なものは次の 2 つです。
NSLog(@"number w index %@, %d", [NSNumber numberWithInteger:index], index);
NSLog(@"number w index %d, %d", [[NSNumber numberWithInteger:index] intValue], index);
特別
な利点
を使用する場合%@
、渡されるオブジェクトはdescription
、基本的に NSObject の子孫である に応答するものであれば何でもかまいません。また、独自のクラスを作成している場合description
は、デフォルトの NSObject 実装よりも意味のある文字列を返すようにオーバーロードすることをお勧めします。
// Try using it with NSArray or NSDictionary and see how each describe themselves.
NSLog(@"the array description: %@", myArray);
NSLog(@"the dictionary description: %@", myDictionary);