NSLog(@"%@",2);
クラッシュ:フォーマットは、id型を指定しますが、引数が型を持つint型はなぜ「形式は、id型を指定しますが、引数がint型持っている」警告
Xcodeは警告を示しているが、実行時になぜこのコードがクラッシュするのでしょうか?ありがとう!
NSLog(@"%@",2);
クラッシュ:フォーマットは、id型を指定しますが、引数が型を持つint型はなぜ「形式は、id型を指定しますが、引数がint型持っている」警告
Xcodeは警告を示しているが、実行時になぜこのコードがクラッシュするのでしょうか?ありがとう!
id
は、Objective-Cのオブジェクトへのポインタであり、IDタイプの
%する@使用int値です。 Ex。 NSString *
またはNSDate *
。したがって、%@
を使用すると、コンパイラは、オブジェクトが格納されているメモリアドレスへのポインタを期待しています。
int
は、「プリミティブ」値タイプです。それはオブジェクトではありません。これはメモリに格納された実際の値で、NSLog文の引数に直接渡されます。
クラッシュする理由は、メモリアドレスへのポインタを探しているプレースホルダに2の値を渡しているためです。それは「悪いアクセス」が意味するものです。 %@
は、正確なメモリアドレスポインタを提供していないため、何も検索できません。ここ
修正は無効なパラメータを渡すので
NSLog(@"%d",2);
PLZ
NSLog(@"%d",2);
2を使用
を使用することですか? – Arc676
オブジェクトを待っていて、プリミティブなintを入れます。 '@(2)'の代わりに '%d'を使用してください。 – Larme
詳細については、この[documentation](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265)を参照してください。 – Gokul