c - NSUInteger 与 NSInteger、int 与 unsigned 以及类似情况

标签 c objective-c cocoa types

谁有专业知识来解释何时使用 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/

相关文章:

c - HashTable 前 20 个计数想法

c - 在菜单中制作菜单

C89,混合变量声明和代码

ios - 将 viewController 的标题更改为 tabbarController

macos - 为 Cocoa 寻找类似电子表格的控件

iphone - 使用 NSPredicates/KVC 获取兄弟键数组

c - 设置 LAPACKE 的带状矩阵格式

objective-c - 如何更改导航栏颜色

iphone - Instruments 的内存泄漏工具是否存在 'for' 循环问题?

cocoa - NSRuleEditor : Criteria for new row