¿Por qué NSString no responde al selector longValue pero responde a longLongValue e intValue?

Estoy intentando get el valor long de un NSString llamando a longValue , pero NSString no responde a longValue . Sin embargo, responde a intValue y longLongValue .

¿Es este el comportamiento previsto? ¿Si es así por qué? No puedo ver una razón lógica para que responda a intValue y longLongValue , pero no a longValue .

Puedo agregar una categoría en NSString y agregar:

 -(long)longValue{ return (long)[self longLongValue]; } 

Esto resuelve mi problema. Pero todavía no entiendo por qué esta no es la implementación pnetworkingeterminada.

Editar 1:

Esto debería responderle por qué no podemos get un longValue de NSString. Cambios importantes de 64 bits

Primera respuesta:

La documentation de Apple habla de get solo los siguientes types numéricos:

 doubleValue floatValue intValue integerValue longLongValue boolValue 

El doc de Apple en NSString

Así que, probablemente, una de las forms de get un longValue de un tipo NSString es cómo lo estás haciendo.

No estoy seguro de que obtendrás el resultado deseado ya que estás escribiendo en longValue.

Sin embargo, la otra forma posible de get un longValue de NSString sería:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; long number = [[numberFormatter numberFromString:string] longValue];

Si desea 64 bits en todas las architectures de CPU, entonces desea que sea long long o int64_t , que se atiende con:

 [NSString longLongValue]