int,NSInteger和NSUInteger之间的区别

时间:2011-10-02 12:46:44

标签: iphone objective-c int nsinteger nsuinteger

Objective-C中intNSIntegerNSUInteger之间的主要区别是什么?

哪个更适合在应用程序中使用?为什么?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:20)

不同之处在于抽象类型及其关联从硬件大小。现在我们不必担心int的大小或指针在任何特定硬件上的大小。

“C”在这方面很糟糕,只说明一个long至少与int一样大,int是硬件的“自然”整数大小(无论这意味着什么),int至少是只要一个短 - 一个(大混乱)。

这似乎是来自Fortran的一个好主意,但没有成熟。

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

因此,如果Apple将返回类型定义为NSUInteger,您只需使用它,并且您不需要知道特定硬件的大小是16位,32位还是64位。 (我只是举例说明了这些价值观。)

正如您在@Bastian中所看到的,实际尺寸取决于硬件。

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