objective-c - Objective-C : Unsigned int compare

标签 objective-c nsarray

所以我在工作中遇到了一个大问题,因为我的代码中有这样的东西:

    int foo = -1;
    NSArray *bar = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", nil];
    if (foo > [bar count]){
        NSLog(@"Wow, that's messed up.");
    } else {
        NSLog(@"Rock on!");
    }

你可能已经知道我发布这个,输出是:

“哇,真乱。”

据我所知, Objective-C 正在将我的负数转换为“有符号”整数,从而终止了我的比较。

我看到了关于此的其他帖子,他们都说明了问题所在,但没有人提出任何简单的解决方案来使这种比较真正起作用。此外,令我震惊的是没有编译器警告,因为这些警告给我带来了严重的问题。

最佳答案

问题

您遇到的问题是因为 foo 是一个有符号整数并且 -[NSArray count] 返回一个无符号整数,foo正在进行到无符号整数的隐式类型转换。参见 Implicit Type Conversion想要查询更多的信息。此外,在 C here 中还有关于类型转换规则的更多信息。 .

解决方案

-[NSArray count] 返回一个无符号值,因为数组永远不会有负数的元素;最小的可能值为 0。将数组的计数与 -1 进行比较没有多大意义 - 计数将始终大于任何负数(尽管存在符号问题)。

因此,这里正确的解决方案,也是避免此类问题的方法,是使用与 -[NSArray count] 的返回值相匹配的类型,即 NSUInteger(U 代表unsigned)。

关于objective-c - Objective-C : Unsigned int compare,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16161107/

相关文章:

objective-c - 首选项窗口关闭后不会重新打开

objective-c - 如何使用 Cocoa 在我的 Dock 图标上绘制徽章?

objective-c - 最佳实践? - 数组/字典作为核心数据实体属性

ios - 将两个数组中的所有字符串放入另一个数组

objective-c - 需要澄清 addObjectsFromArray 函数

objective-c - 将用户默认绑定(bind)到不同的标识符

iphone - iOS:如何读取播放实时音乐?

iphone - 如何以编程方式检测iphone 4

ios - 我怎样才能从 400 个数组中挑选一个?

iphone - 具有子对象的数组中唯一对象的算法?