在标题中,定义如下:
#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
UInt32在没有问题的情况下适合NSUInteger(unsigned int)吗? UInt32和unsigned int之间的区别在哪里?
我认为unsigned long大于unsigned int?
答案 0 :(得分:9)
我认为UInt32
和unsigned int
之间的唯一区别是UInt32
保证为32位长,而unsigned int
技术上可能更短你正在运行(比如说)< 32位操作系统。
但是,鉴于Mac和iPhone都至少是32位系统,因此可以合理地互换使用unsigned int
,UInt32
和NSUInteger
。这里唯一的区别是NSUInteger
可能是64位长(在Mac上,编译x86_64时)。
至于您对unsigned long
与unsigned int
的问题,UInt32
是对unsigned long
的类型定义,再次表明可互换使用是安全的。 unsigned long
保证至少与unsigned int
一样大。
答案 1 :(得分:1)
您可以随时在程序的初始部分添加一些环境检查代码,以最大限度地减少意外:
if (sizeof(NSUInteger) != sizeof(UInt32)) {
printf("Error: Wrong integer type size!\n");
exit(0);
}