NSLog ステートメントをフォーマットする方法については、String Format Specifiersを参照してください。オブジェクトには、書式設定された文字列を返す組み込みの -description メソッドがあるため、NSLog を使用するのは簡単です。スケーラー値については、適切なフォーマッターを使用する必要があります。
ハードウェアからハードウェアに移行すると精度が変化するため、オブジェクト変換を使用して値をログに記録する習慣を身につけることをお勧めします。この場合:
NSLog(@"%@", [[NSNumber numberFromInt:myObject.myId] stringValue]);
これは常に正しく印刷されます。
編集#1:申し訳ありません。上記を書いていたら寝不足でした。私が実際に意図したのは、単純な vs の使用と with での印刷int
に対して警告することでした。NSInteger
NSNumber numberWithInteger:
64 ビット ハードウェアでの次の実行を検討してください。
int x=pow(2,63);
NSLog(@"x=%d",x); //prints x=2147483647
NSInteger n=pow(2,63);
NSLog(@"n=%d",n); // prints n=-1
NSLog(@"n=%@",[[NSNumber numberWithInteger:n] stringValue]); // prints n=9223372036854775807
8 ビット システムの昔は、常に 8 ビットの 'int' を使用すると問題が発生しました。256 回を超える反復で for ループを実行するには、long
. 32 ビットでは、この種の問題は見られず、変数int
のサイズを追跡する習慣が身に付くこともありません。int
これは、データ内の非常に具体的でまれな値でのみ発生するため、追跡がほぼ不可能な悪質なバグにつながる可能性があります。
iPhone (またはその他の将来のモバイル/プラットフォーム) 向けに作成するということは、昔と同じように、非常に可変性の高いハードウェアで作成することを意味します。システムおよび API 固有の定義を使用する習慣を早い段階で身に付けることが最善です。
編集#2:
ここで myId は int で、コンソールは 70614496 のような高い数字を返します。
(1) 実行するたびに異なる数値が出力される場合は、おそらく、設定時に int にポインターを割り当てています。NSLog は、ポインターの値を int として正しく出力しています。
(2) 毎回同じ数字を出力する場合、上記の最初の編集のようにオーバーフローの問題が発生している可能性があります。
いずれの場合も、id
プロパティに値を代入するコードを確認する必要があります。出力する場所ではありません。