谁有专业知识来解释何时使用 NSUInteger 以及何时使用 NSInteger?
我曾见过 Cocoa 方法返回 NSInteger,即使在返回值总是无符号的情况下也是如此。
根本原因是什么?如果我们要表示负值,是否严格限制 NSInteger 或 int?
来自 NSObjCRuntime.h:
#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
最佳答案
在处理 NSUInteger 与 NSInteger 时,您还应该了解整数转换规则:
例如,以下片段返回 0(假),尽管您希望它打印 1(真):
NSInteger si = -1;
NSUInteger ui = 1;
printf("%d\n", si < ui);
原因是 [si] 变量被隐式转换为 unsigned int!
参见 CERT's Secure Coding site围绕这些“问题”以及如何解决这些问题进行深入讨论。
关于c - NSUInteger 与 NSInteger、int 与 unsigned 以及类似情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2557209/