NSNotFound
被定义为 NSIntegerMax
,它被定义为 LONG_MAX
。
NSRange.location
被定义为 NSUInteger
。
一些 Foundation 方法返回一个其 location 值为 NSNotFound
的 NSRange
。
因此,人们经常进行以下比较:
if (aRange.location == NSNotFound)
但这不应该会产生有符号和无符号整数之间的比较警告吗?
NSNotFound
被定义为 NSIntegerMax
,它被定义为 LONG_MAX
。
NSRange.location
被定义为 NSUInteger
。
一些 Foundation 方法返回一个其 location 值为 NSNotFound
的 NSRange
。
因此,人们经常进行以下比较:
if (aRange.location == NSNotFound)
但这不应该会产生有符号和无符号整数之间的比较警告吗?
您正在将一个无符号(64位)变量与一个带符号的常数进行比较,该常数也适合于变量的范围(它不是负数)。因此不需要警告。
警告通常在与负常数或两侧都有负数(即一部分是或可能是负数,而另一部分仅为正数或零)的变量进行比较时出现。
附带说明:在32位和64位平台上,NSNotFound是不同的,因此不要硬编码或在任何地方存储该值。