36

とObjective-Cintの主な違いは何ですか?NSIntegerNSUInteger

アプリケーションで使用するのに適しているのはどれですか?その理由は?

4

2 に答える 2

29

そのような場合、右クリックして定義に移動できます。

#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
于 2011-10-02T13:05:41.563 に答える
20

違いは、ハードウェアからサイズ設定された抽象型とその関連付けです。int のサイズや、特定のハードウェアでのポインターの大きさを気にする必要がなくなりました。

「C」はこれが苦手で、long は int と少なくとも同じ大きさであり、int はハードウェアの「自然な」整数サイズであり (意味が何であれ)、int は少なくとも int と同じ長さであると述べているだけです。短い--(大きな混乱)。

これは当時 Fortran から来た良いアイデアのように思えましたが、うまく機能しませんでした。

uint32_t、int16_t などの POSIX 定義を使用することもできます。しかし、これは、特定のハードウェア上で必要なポインタの大きさにも対応していません。

したがって、Apple が戻り値の型を NSUInteger と定義している場合は、それを使用するだけで、特定のハードウェアのサイズが 16、32、または 64 ビットであるかを知る必要はありません。(例として、これらの値を空中から選択しました)。

@Bastian でわかるように、実際のサイズはハードウェアによって異なります。

ドキュメントは「質問の手紙」に答えますが、「なぜ」の理解を提供しませんか?

于 2011-10-02T13:20:10.360 に答える