为什么NSNotFound不是-1而是NSIntegerMax

时间:2012-02-18 03:37:07

标签: objective-c

NSNotFound定义为NSIntegerMax,它在32位和64位上具有不同的值,这给持久和分布式env带来了很多不便。为什么不将它定义为-1?

PS,在ObjC和Cocoa中,一些indexOf ...方法返回NSNotFound但有些返回-1,这是因为这些结果不一致。

3 个答案:

答案 0 :(得分:12)

来自the docs的这条说明可能很重要:

  

特别注意事项

     

在Mac OS X v10.5之前,NSNotFound被定义为0x7fffffff。对于32位系统,这实际上与NSIntegerMax相同。为了支持64位环境,NSNotFound现在正式定义为NSIntegerMax。但是,这意味着该值在32位和64位环境中是不同的。

答案 1 :(得分:10)

答案可能不是因为它有时会以无符号值的形式返回 - 在有符号和无符号的Objective-C转换中,有效地进行位复制,因此您可以将unsigned与-1进行比较并得到您期望的答案(值全是1 - -1表示有符号,最大整数表示无符号)。请参阅answer to this question

所以我们来看你问题的第二部分,为何不一致? 多样性是生活的调味品,或换句话说现在如此民众如此奇怪 - 人们只是不一致,没有比这更复杂的了!

答案 2 :(得分:7)

几乎可以肯定,因为返回它的一些函数返回 unsigned 值,例如NSIndexOfObject

- (NSUInteger)indexOfObject:(id)anObject
//   ^
//   Note this!