1. ホーム
  2. ios

[解決済み] NSIntegerとintの使い分けについて

2022-03-16 22:15:51

質問

を使用する必要があります。 NSInteger iOS用に開発する場合、int型と比較するとどうでしょうか? Appleのサンプルコードでは NSInteger (または NSUInteger を使用すると、関数の引数として値を渡したり、関数から値を返したりすることができます。

- (NSInteger)someFunc;...
- (void)someFuncWithInt:(NSInteger)value;...

しかし、関数内では、ただ int を使用して値を追跡します。

for (int i; i < something; i++)
...

int something;
something += somethingElseThatsAnInt;
...

というのを読んだ(言われた)ことがある。 NSInteger は、64ビット環境でも32ビット環境でも整数を参照する安全な方法であり、なぜ int を使用します。

解決方法は?

通常 NSInteger コードがどのようなプロセッサアーキテクチャで実行されるかわからない場合、何らかの理由で可能な限り大きな整数型が必要になることがありますが、32ビットシステムでは単に int 64ビットシステムでは long .

を使うことにこだわります。 NSInteger の代わりに int / long 特に必要でない限り

NSInteger / NSUInteger は、*dynamic と定義されます。 typedef これらの型のいずれかに *s を加えたもので、次のように定義されています。

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif

それぞれのタイプで使うべき正しい書式指定子については 文字列プログラミングガイドの「プラットフォーム依存性」の項を参照。