和在Objective-C中int
的主要区别是什么?NSInteger
NSUInteger
哪一个更适合在应用程序中使用,为什么?
和在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 至少与 int 一样长一个短——一个(大混乱)。
这在当时似乎是来自 Fortran 的一个好主意,但并不成熟。
可以使用 POSIX 定义,例如 uint32_t、int16_t 等。但这也不能解决指针在任何特定硬件上需要多大的问题。
因此,如果 Apple 将返回类型定义为 NSUInteger,您只需使用它,您不需要知道特定硬件的大小是 16、32 还是 64 位。(我只是举个例子,凭空挑选这些值)。
正如您在@Bastian 中看到的,实际大小取决于硬件。
该文档回答了“问题的信”,但没有提供对“为什么”的理解?