【发布时间】:2011-11-29 09:31:49
【问题描述】:
Objective-C 中int、NSInteger 和NSUInteger 的主要区别是什么?
哪个更适合在应用程序中使用,为什么?
【问题讨论】:
-
没有
NSInt这样的东西。
标签: iphone objective-c int nsinteger nsuinteger
Objective-C 中int、NSInteger 和NSUInteger 的主要区别是什么?
哪个更适合在应用程序中使用,为什么?
【问题讨论】:
NSInt这样的东西。
标签: iphone objective-c int 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 至少是只要短——一个(大乱)。
这在当时来自 Fortran 似乎是个好主意,但并不成熟。
可以使用 POSIX 定义,例如 uint32_t、int16_t 等。但这也不能解决指针在任何特定硬件上需要多大的问题。
因此,如果 Apple 将返回类型定义为 NSUInteger,您只需使用它,您就不需要知道您的特定硬件的大小是 16 位、32 位还是 64 位。 (我从空中选择了这些值只是为了举例)。
正如您在@Bastian 中看到的,实际大小取决于硬件。
文档回答了“问题的信”,但没有提供对“为什么”的理解?
【讨论】: