とObjective-Cint
の主な違いは何ですか?NSInteger
NSUInteger
アプリケーションで使用するのに適しているのはどれですか?その理由は?
とObjective-Cint
の主な違いは何ですか?NSInteger
NSUInteger
アプリケーションで使用するのに適しているのはどれですか?その理由は?
そのような場合、右クリックして定義に移動できます。
#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
違いは、ハードウェアからサイズ設定された抽象型とその関連付けです。int のサイズや、特定のハードウェアでのポインターの大きさを気にする必要がなくなりました。
「C」はこれが苦手で、long は int と少なくとも同じ大きさであり、int はハードウェアの「自然な」整数サイズであり (意味が何であれ)、int は少なくとも int と同じ長さであると述べているだけです。短い--(大きな混乱)。
これは当時 Fortran から来た良いアイデアのように思えましたが、うまく機能しませんでした。
uint32_t、int16_t などの POSIX 定義を使用することもできます。しかし、これは、特定のハードウェア上で必要なポインタの大きさにも対応していません。
したがって、Apple が戻り値の型を NSUInteger と定義している場合は、それを使用するだけで、特定のハードウェアのサイズが 16、32、または 64 ビットであるかを知る必要はありません。(例として、これらの値を空中から選択しました)。
@Bastian でわかるように、実際のサイズはハードウェアによって異なります。
ドキュメントは「質問の手紙」に答えますが、「なぜ」の理解を提供しませんか?