36

和在Objective-C中int的主要区别是什么?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 的一个好主意,但并不成熟。

可以使用 POSIX 定义,例如 uint32_t、int16_t 等。但这也不能解决指针在任何特定硬件上需要多大的问题。

因此,如果 Apple 将返回类型定义为 NSUInteger,您只需使用它,您不需要知道特定硬件的大小是 16、32 还是 64 位。(我只是举个例子,凭空挑选这些值)。

正如您在@Bastian 中看到的,实际大小取决于硬件。

该文档回答了“问题的信”,但没有提供对“为什么”的理解?

于 2011-10-02T13:20:10.360 回答