No momento (setembro de 2014), eu recomendaria o uso NSInteger/CGFloatao 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, longe inttipos.
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 CGFloattipo
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
Esse tipo representa 32 bits floatem 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 intvalor de 32 bits em um ambiente de 32 bits e um de 64 bits longem um ambiente de 64 bits. Você pode resolver esse caso usando o tipo NSIntegerque serve como um intou com longbase no ambiente de compilação / tempo de execução.