objective-c - saber - como flotar en el agua verticalmente
Objetivo C. FundiciĆ³n int para flotar (3)
Perdón por esa pregunta general, pero ¿cuál es el mejor método (lo más rápido posible y más seguro) para convertir int en flotante en ObjC:
primero
int b = 10;
float a = [[NSNumber numberWithInt: b] floatValue]
Habrá una instancia NSNumber
y mensajes numberWithInt
, se enviará floatValue
, ¿verdad?
Segundo
int b = 10;
float a = (float) b;
Estilo C: ¿esto con llamar a alguna subrutina?
O de alguna otra manera?
¿Y por qué?
Realmente no veo la necesidad de un objeto NSNumber
cuando hay disponible un tipo de NSNumber
directa entre dos primitivas numéricas. La clase NSNumber
no estaba destinada únicamente a la conversión de tipos de todos modos.
Como usted pregunta por la seguridad, lo primero que debe verificar es si el valor de su int
cabe en un float
. De lo contrario, estás perdiendo datos en silencio. A menos que el valor sea muy pequeño, no cabrá. Cambiaría a usar el double
para que no tenga que preocuparse por esto, solo haga la tarea:
double d;
d = i;
Rara vez se usa para las variables de tipo float
, muy parecido a short
...
El tipo de estilo C es el más claro y fácil de leer. Si descubro un código que creó un objeto NSNumber
solo para que haga la conversión, me preguntaría "¿Por qué lo hizo de esa manera? ¿Algo está sucediendo aquí aparte de una simple conversión tipo antiguo? ¿Qué me estoy perdiendo? "
En cuanto a la velocidad, sospecho que la conversión de tipo simple también sería más rápida: el objeto NSNumber
necesitará realizar prácticamente las mismas operaciones para realizar la conversión, y además tendrá una sobrecarga adicional de creación de objetos y mensajes. Pero como en todos esos casos, no adivine, mida. Perfile su código para ver si la conversión es un cuello de botella que es lo suficientemente significativo como para ser digno de su atención.