为什么NSNotFound不是-1而是NSIntegerMax

kli*_*liu 7 objective-c

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

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

Jos*_*ell 12

来自文档的这个说明可能是相关的:

特别注意事项

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


CRD*_*CRD 10

那么答案可能不是因为它有时会以无符号值的形式返回 - 在Objective-C中,有符号和无符号之间的转换实际上是位拷贝,因此您可以将unsigned与-1进行比较并得到您期望的答案(值为全部 - -1表示有符号,最大整数表示无符号).请参阅这个问题的答案.

所以我们来看你问题的第二部分,为何不一致?好的变化是生活的调味品,或者说另一种方式就像民间一样奇怪 - 人们只是不一致,没有比那更复杂的东西!


pax*_*blo 7

几乎可以肯定,因为返回它的一些函数返回一个无符号值,例如NSIndexOfObject:

- (NSUInteger)indexOfObject:(id)anObject
//   ^
//   Note this!
Run Code Online (Sandbox Code Playgroud)