6
NSUInteger index = [self.objects indexOfObject:obj];

if (index == NSNotFound) {
    // Success! Note: NSNotFound internally uses NSIntegerMax
}

if (index == NSUIntegerMax) {
    // Fails!
}

为什么?我想作为 indexOfObject 的结果得到一个无符号值。所以,自然地,我假设如果找不到对象,它将返回 NSUIntegerMax 而不是 NSIntegerMax。这是一个错误,还是对此行为有合理的解释。

4

3 回答 3

7

也许NSNotFound可以在使用NSInteger. 它也更安全,以防有人将 index 声明为NSInteger而不是NSUInteger.

最多只能说NSNotFound定义为很奇怪NSIntegerMax,但它肯定不是错误。

于 2011-07-05T11:17:04.017 回答
2

你的假设是错误的。它返回一个NSNotFound无论现在是现在还是将来。而且它在不同的平台上可能很容易不同(即 32 位和 64 位)。

它存在的原因是为了使用它。不要使用其他可能相同的常量来欺骗自己。

于 2011-07-05T11:19:05.030 回答
0

AnNSUInteger是无符号的(“U”),而 anNSInteger是有符号的。

您仍然可以比较无符号整数和有符号整数的值。假设 NSNotFound 实际上等于 NSUIntegerMax 可能是一个错误。事实上,它在 NSObjCRuntime.h 中被定义为等于 NSIntegerMax。

于 2011-07-05T11:19:29.747 回答