No momento (setembro de 2014), eu recomendaria o uso NSInteger/CGFloat
ao interagir com as APIs do iOS etc. se você também estiver criando seu aplicativo para arm64. Isso é porque você provavelmente irá obter resultados inesperados quando você usa os float
, long
e int
tipos.
EXEMPLO: FLUTUAÇÃO / DUPLA vs CGFLOAT
Como exemplo, usamos o método delegado UITableView tableView:heightForRowAtIndexPath:
.
Em um aplicativo somente de 32 bits, ele funcionará bem se for escrito assim:
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
float
é um valor de 32 bits e os 44 que você está retornando são um valor de 32 bits. No entanto, se compilarmos / executarmos o mesmo trecho de código em uma arquitetura arm64 de 64 bits, o 44 será um valor de 64 bits. Retornar um valor de 64 bits quando um valor de 32 bits é esperado fornecerá uma altura de linha inesperada.
Você pode resolver esse problema usando o CGFloat
tipo
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
Esse tipo representa 32 bits float
em um ambiente de 32 bits e um de 64 bitsdouble
em um ambiente de 64 bits. Portanto, ao usar esse tipo, o método sempre receberá o tipo esperado, independentemente do ambiente de compilação / tempo de execução.
O mesmo vale para métodos que esperam números inteiros. Esses métodos esperam um int
valor de 32 bits em um ambiente de 32 bits e um de 64 bits long
em um ambiente de 64 bits. Você pode resolver esse caso usando o tipo NSInteger
que serve como um int
ou com long
base no ambiente de compilação / tempo de execução.