A partir de este momento (septiembre de 2014), recomendaría usarlo NSInteger/CGFloatal interactuar con las API de iOS, etc., si también está creando su aplicación para arm64. Esto se debe a que es probable que obtenga resultados inesperados cuando use el float, longyint tipos.
EJEMPLO: FLOTADOR / DOBLE vs CGFLOAT
Como ejemplo tomamos el método delegado UITableView tableView:heightForRowAtIndexPath:.
En una aplicación de solo 32 bits, funcionará bien si se escribe así:
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
floates un valor de 32 bits y el 44 que está devolviendo es un valor de 32 bits. Sin embargo, si compilamos / ejecutamos este mismo código en una arquitectura arm64 de 64 bits, el 44 será un valor de 64 bits. Devolver un valor de 64 bits cuando se espera un valor de 32 bits dará una altura de fila inesperada.
Puede resolver este problema utilizando el CGFloattipo
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
Este tipo representa un floatentorno de 32 bits en un entorno de 32 bits y uno de 64 bits.double en un entorno de 64 bits. Por lo tanto, al usar este tipo, el método siempre recibirá el tipo esperado independientemente del entorno de compilación / tiempo de ejecución.
Lo mismo es cierto para los métodos que esperan enteros. Dichos métodos esperarán un intvalor de 32 bits en un entorno de 32 bits y un valor de 64 bits longen un entorno de 64 bits. Puede resolver este caso utilizando el tipo NSIntegerque sirve como into longbasado en el entorno de compilación / tiempo de ejecución.