2011-06-15 5 views
9

NSNotFound se define como NSIntegerMax, que se define como LONG_MAX.NSNotFound, NSInteger, NSUInteger y NSRange.location

NSRange.location se define como NSUInteger.

Algunos métodos de Fundación devuelven NSRange cuyo valor de ubicación es NSNotFound.

Por lo tanto, a menudo se hace esta comparación:

if (aRange.location == NSNotFound) 

Pero no es que una comparación entre números enteros con y sin signo que debe generar una advertencia?

Respuesta

12

Está comparando una variable sin signo (64 bit) con una constante firmada que también encaja en el rango de la variable (no es negativo). Entonces no hay necesidad de una advertencia.

Las advertencias aparecen normalmente cuando se comparan contra constantes negativas o variables en ambos lados (es decir, una parte es o puede ser negativa mientras que la otra solo es positiva o cero).

Una nota al margen: NSNotFound es diferente en las plataformas de 32 bits frente a las de 64 bits, por lo que no debe codificar ni almacenar ese valor en ninguna parte.

Cuestiones relacionadas