2009-12-02 16 views
9

Tengo una pregunta acerca de seguridad o convertir correctamente un NSString en tipos tales como CGFloat y NSInteger, teniendo en cuenta que estos son simplemente tipos de contenedor que Apple creó para utilizar diferentes primitivas dependiendo de ciertos factores (por ejemplo, NSInteger es typedef 'd a int en arquitecturas de 32 bits y long en arquitecturas de 64 bits).correctamente la conversión de NSString a CGFloat, NSInteger, etc

Por ejemplo, sé que puedo usar algo como [ someString intValue ] o [ someString longValue ], pero ¿cómo puedo decir que en lugar quiero someString para convertirse en un NSInteger, lo que permite la precisión de la primitiva subyacente de ser elegido por el compilador? Decir algo como NSInteger integer = [ someString intValue ] daría como resultado la pérdida de datos si se creó someString a partir de un NSInteger en un sistema de 64 bits, ¿verdad? ¿Cuál es la mejor manera de lidiar con esta situación?

Respuesta

11

Use integerValue en su lugar. Y obtener un int solo causará un problema si el entero representado por la cadena es mayor que el INT_MAX de 32 bits, pero aún así es mejor usar el método más compatible.

+0

Ah, gracias. Ni siquiera noté 'integerValue'. – LucasTizma

+0

Es por eso que debe leer las notas de la versión cada vez que sale una versión de sistema operativo importante. Siempre hay algunas adiciones útiles a las clases que hemos conocido y amado durante muchos años. – NSResponder

+1

¿Qué hay para convertir a CGFloat? – Casebash