2011-07-15 11 views
34

Más en In Cocoa do you prefer NSInteger or just regular int, and why?, se mencionó NSDouble y NSFloat, pero no puedo ver una referencia para los que figuran en la documentación. Si el propósito de NSInteger es para la seguridad arquitectónica, ¿qué pasa con otros tipos como double o float?¿Existen NSDouble, NSFloat u otros tipos distintos de NSInteger?

+1

No estoy seguro de qué está hablando OP. Esos no existen. – BoltClock

+0

¿Entonces el doble y el flotador son arquitectónicos seguros? Puedo usar double, pero cuando se trata de int necesito usar NSInteger, ¿así? – sarunw

+3

No creo que * NSFloat *, * NSDouble * existan. Pero, sé que existe CGFloat (Fuera del contexto de la pregunta. ¿Eh?) – EmptyStack

Respuesta

79

NSInteger existe porque el tipo int varía en tamaño entre los sistemas de 32 bits y 64 bits. float y double no varían en tamaño de la misma manera, por lo que no es necesario tener tipos de envoltura para ellos.

+0

Entonces, ¿qué hacer si quiero agregar un doble a un NSArray? Solo acepta objetos –

+6

Envuélvalo en un objeto NSNumber (que es una subclase del NSValue más general). – duskwuff

+11

Bueno, hay 'CGFloat', que es un' typedef' para 'float' en 32bit y para' double' en 64bit. Lo cual es bastante equivalente a lo que se ha hecho con 'NS (U) Integer', diría yo. – Regexident

5

No hay NSFloat pero sé que el API de núcleo de gráficos con el tiempo cambió de float a CGFloat de modo que pudiera utilizar un double en algunas arquitecturas.

Lo mejor es usar los tipos exactos que declaran los encabezados API. Esto hace que los cambios de tipo sean automáticos si alguna vez recompila su código para un objetivo diferente.

0

También se trata de convenciones.

Un typedef a un int no es compatible con int int.

Ejemplo: pid_t es de tipo int, pero pasar un int crearía una advertencia.

¿Por qué? Porque quiere estar seguro de que si cruza los límites de la API, todos saben lo que espera el código.

Hay tipos flotante y doble, es decir, NSTimeInterval. No se trata realmente del tipo subyacente, sino de la convención a seguir.

Si declara un int local como contador de bucles y no planea pasarlo a una API bien definida, puede llamar a int an int.

Cuestiones relacionadas