6

NSNumber についての私の理解では、特定のデータ型で NSNumber を作成する場合、同じデータ型の変数にアクセスする必要があります。例えば

NSNumber *myIntNumber = [NSNumber numberWithInt:1];
int myInt = [myIntNumber intValue];

NSNumber *myNSIntegerNumber = [NSNumber numberWithInteger:1];
NSInteger myInteger = [myIntNumber integerValue];

#define 変数を使用して NSNumber を作成する場合:

#define MY_DEFINE 6

それは私が次のことができないということですか

NSNumber *myNSIntegerNumber = [NSNumber numberWithInteger:MY_DEFINE];
NSInteger myInteger = [myIntNumber integerValue];

MY_DEFINE は NSInteger ではないためですか?

上記のコードが 32 ビット アプリで機能することはわかっていますが、64 ビット アプリでも機能することを確認しようとしています。そしてもちろん、物事を適切に行うことは決して悪いことではありません。

上記のことができない場合、MY_DEFINE を別の方法で定義して、後で NSInteger を取得するために使用できる NSNumber を作成できるようにする必要がありますか?

4

1 に答える 1

10

あなたの理解NSNumberは間違っています。サポートされている任意の型でを作成でき、NSNumberサポートされている任意の型アクセサーを使用できます。2 つが同じである必要はありません。

// Perfectly valid
NSNumber *number = [NSNumber numberWithFloat:3.14];
int val = [number intValue]; // results in 3

の使用#defineは完全に有効です。プリコンパイラは、コードを次のように変換するだけです。

NSNumber *myNSIntegerNumber = [NSNumber numberWithInteger:6];

#defineコードがコンパイルされる前に行われる単純なコピー アンド ペースト (少なくともこのタイプの単純な形式では) に過ぎないことを覚えておいてください。

最新の構文を使用することもできます:

NSNumber *number = @MY_DEFINE;

これは次のようになります。

NSNumber *number = @6;

ところで-なぜこの質問を投稿するのですか? まずは試してみませんか?

于 2013-11-04T04:09:38.850 に答える