objective c - plataforma - ¿Existen NSDouble, NSFloat u otros tipos distintos de NSInteger?
versiones de objective c (3)
En In Cocoa, ¿prefieres NSInteger o solo int regular, y por qué? , se mencionó NSDouble
y NSFloat
, pero no puedo ver una referencia para aquellos en cualquier documentación. Si el propósito de NSInteger
es la seguridad arquitectónica, ¿qué pasa con otros tipos, como el double
o el float
?
No hay NSFloat
pero sé que la API de gráficos básicos finalmente cambió de float
a CGFloat
por lo que podría usar un double
en algunas arquitecturas.
Lo mejor es usar los tipos exactos que declaran los encabezados de API. Esto hace que los cambios de tipo sean automáticos si alguna vez recompila su código para un objetivo diferente.
También se trata de convenciones.
Un typedef a un int es incompatible con int int itself.
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 declaras un int local como un contador de bucle y no planeas pasarlo a una API bien definida, puedes llamar a int an int.
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.